相鄰格仔連雙向邊,如果乙個點有障礙,那進它的邊權就是1,否則是0
這樣的話,兩點間的最短路+[起始點有障礙],就是從乙個點走到另乙個需要清除的障礙的個數
求出最短路後列舉這兩個點就可以了
然而30*30還是太大跑不開floyd,只能寫乙個dijkstra
1 #include2#define clr(a,x) memset(a,x,sizeof(a))
3using
namespace
std;
4 typedef long
long
ll;5 typedef unsigned long
long
ull;
6 typedef pairpa;
7const
int maxn=35,npm=905;8
9inline ll rd()
12while(c>='
0'&&c<='
9') x=x*10+c-'
0',c=getchar();
13return x*neg;14}
1516
intid[maxn][maxn];
17int
dis[npm][npm];
18int
n,m,t;
19char
can[npm][npm];
20 priority_queue,greater>q;
21bool
flag[npm];
2223 inline void chkmin(int s,int x,int
y)27
28 inline void getdis(int
s)41}42
43int
main()
52for(i=1;i<=n;i++)56}
57double ans=0;58
for(i=1;i<=n;i++)64}
65}66}
67 printf("
%.6lf\n
",ans);
68return0;
69 }
P4162 SCOI2009 最長距離
題目鏈結 這道題資料範圍比較小,所以方法還是比較暴力的。思路 先按每個格仔的狀態,讓所有格仔與他周圍的格仔連一條權值為它連向那個格仔的值 0或1 然後我們n方列舉所有格仔跑最短路,最短路即為從起點到終點的最小障礙數。然後我們列舉所有最短路,先看他移除障礙後是否只用了小於等於k次機會,然後求出兩點間的...
XYLX 10 21最長距離
北京和天津兩座超大城市正在融合為乙個超級都市群,融合首要的問題就是 互通,也就是解決交通問題,現在京津冀領導小組正在籌畫在兩座城市修建一條 集客貨運與一體的城際高鐵,初步的設想如下 分別以兩座城市中心作為圓心 原有邊界中距離圓心最遠的長度作為半徑各自劃定新的區域,假設這樣的兩個圓 有不僅僅乙個交點。...
SCOI2009 最長距離
windy有一塊矩形土地,被分為 nm 塊 11 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。如果從格仔a不可以走到格仔b,就沒有距離。如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。如果windy可以移走t塊障...