洛谷 1119 災後重建 Floyd

2021-07-24 10:50:16 字數 1200 閱讀 1504

比較有趣的floyd,剛開始還真沒看出來。。。。(下午腦子不太清醒)

先考慮一下floyd本身的實現原理,

for(k=1;k<=n;k++)   

for(i=1;i<=n;i++)  

for(j=1;j<=n;j++)   

if(e[i][j]>e[i][k]+e[k][j])   

e[i][j]=e[i][k]+e[k][j]

列舉圖中的每乙個點,用這些點去逐次更新當前的圖,最終得到的dis值就是最終的每兩點的最小距離

沒有學過floyd的同學可以參考啊哈磊的floyd講解

那麼對於這道題目,我們就可以直接按照每個點修好的時間排序,按照該順序加入點,進行floyd,輸出dis值即為結果

1 #include 2 #include 3 #include 4

5const

int maxn = 500;6

const

int inf = 0x3f3f3f3f >> 1;7

intdis[maxn][maxn];

8int

pointtime[maxn];

9int askx[50500], asky[50500], askt[50500

];10

intn, m;

11int tot = 0;12

intx, y, z;

13int

q;14

int cur = 0;15

16void update(int

x) 21}22

23int

main ()

32for (int i = 1; i <= m; i++)

37 scanf("

%d", &q);

38for (int i = 1; i <= q; i++)

44if (dis[askx[i]][asky[i]] >= inf || pointtime[askx[i]] > askt[i] || pointtime[asky[i]] > askt[i]) printf("

-1\n");

45else printf("

%d\n

", dis[askx[i]][asky[i]]);46}

4748

49return0;

50 }

洛谷 1119 災後重建 Floyd

比較有趣的floyd,剛開始還真沒看出來。下午腦子不太清醒 先考慮一下floyd本身的實現原理,for k 1 k n k for i 1 i n i for j 1 j n j if e i j e i k e k j e i j e i k e k j 列舉圖中的每乙個點,用這些點去逐次更新當前...

floyd 洛谷P1119 災後重建

我靠!我連floyd都忘拉 考考空空曠曠坎坎坷坷!我們floyd不是要列舉k,i,j 對於這個k,我們僅僅是用k去跟新其他邊 這個k是存在的 換句話說,f x k 這個值在k被列舉到之前就是會不斷更新的 我一開始以為k是消失的,列舉到k的時候會產生乙個k 我靠,這個題目有毒,我連floyd都不會拉 ...

洛谷 P1119 災後重建(Floyd)

b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度,公路是雙向的。並給...