洛谷 P1111 修復公路 最小生成樹

2022-02-13 14:04:20 字數 926 閱讀 2391

以後只發題目鏈結!!!

給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,即最早什麼時候任意兩條村莊都存在至少一條修復完成的道路(可以由多條公路連成一條道路)

很顯然,求的是乙個最小瓶頸生成樹。我的另一篇部落格:

所以,我們只需要跑一邊最小生成樹。這裡用的是kruskal演算法。

我們要求的是最早的時間,所以我們只需用t存時間即可。題目中還說如果不連通輸出-1,只需統計邊數,是否=n-1即可。

建議大家看一看另外一道題,乙個思路但解釋得更詳細:

十年oi一場空,乙個cin見祖宗。

最後附上正解:

1 #include2 #include3 #include4

using

namespace

std;

5struct

edgebian[100005

];10

int n,m,fa[1005

],t,cnt;

11bool

cmp(edge a,edge b)

14int find(int

x)18

intmain()

1925 sort(bian+1,bian+m+1

,cmp);

26for(int i=1;i<=m;i++)34}

35if(cnt!=n-1) cout<

else cout<

37return0;

38 }

ac**

洛谷p1111 修復公路

一開始村莊之間兩兩不連通,按時間從小到大修復公路,判斷兩個村莊是否聯通,若聯通了那就直接看下一條路,若不聯通那就修復。直到m條路都遍歷完。重點來了,最早什麼時候任意兩條村莊都存在至少一條修復完成的道路 可以由多條公路連成一條道路 滿足條件最少需要幾條路?n個村莊就n 1條唄,輸出時判斷公路數有沒有至...

洛谷P1111 修復公路

做完題看了一下題解,發現大佬們用的都是什麼最小生成樹,蒟蒻瑟瑟發抖,其實這題用最簡單的並查集就可以通過 對於時間進行排序,從最早完成的時間開始,每次合併兩條邊,然後檢視他們是否屬於同一集合,如果是,輸出完成時間,直接結束程式 如果遍歷結束還沒用都處於同一聯通塊,那麼就輸出 1.不開o2記得卡常 附 ...

洛谷P1111 修復公路

最近並查集有點上癮,下午來道黃題提神醒腦 p1111 修復公路 試題描述 a地區在 過後,連線所有村莊的公路都造成了損壞而無法通車。派人修復這些公路。給出a地區的村莊數n,和公路數m,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麼時候能修完這條公路。問最早什麼時候任意兩個村莊能夠通車,...