暢通工程 並查集模版題

2022-05-20 16:46:06 字數 1000 閱讀 7586

題意:

多組輸入n,m,當n為0退出人輸入,n是道路數目,m是村莊總數,隨後n行,每行輸入三個數兩個村莊的編號,以及連線這兩個村莊的費用。

對每一組資料輸出暢通工程的最低費用,如果不能暢通就輸出「?」(不包括雙引號)

一道是fjut的鏈結,另外一道是hdu的

思路:其實這道題就是一道排序+並查集題,將每條路的費用進行排序然後依次合併,然後費用增加,當n中情況都試過了,再來乙個迴圈判斷是否全部連線。

好啦,我們來看ac**吧:

#include#include

#include

#include

using

namespace

std;

int fa[105

];struct node//

定義這個結構體,a代表的是乙個村莊的編號,b代表的是另乙個村莊的編號,cost顧名思義

;int find(int

x)

returnx;}

bool cmp(node x,node y)//

cmp排序

int main(void

) sort(cp+1,cp+n+1,cmp);//

排序 for(int i=1;i<=n;i++)//

這個迴圈開始處理費用

}int k=find(1

);

int flag=1

;

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

這個迴圈檢查是否村子都連線

}if(flag)

cout

else

cout

<<'?'

<}return0;

}

小結一下:這道題也算一道模版題吧,只不過可能開始有點難想,為什麼要對費用排序,騎士想通了就覺得很簡單,sort的自定義排序我也學了一波還是挺好用的,cmp的用法,待會我會另外寫一篇部落格,以供大家學習。

並查集入門題(暢通工程)

某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是...

並查集 暢通工程

problem description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input 測試輸入包含若干測試用例。...

並查集(暢通工程)

某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別...