luogu4162 最長距離 dijkstra

2022-04-29 21:18:09 字數 1082 閱讀 6582

相鄰格仔連雙向邊,如果乙個點有障礙,那進它的邊權就是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塊障...