暢通工程 HDU 1232

2022-05-01 07:42:13 字數 1085 閱讀 1323

某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省**「暢通工程」的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路? 

input測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是城鎮數目n ( < 1000 )和道路數目m;隨後的m行對應m條道路,每行給出一對正整數,分別是該條道路直接連通的兩個城鎮的編號。為簡單起見,城鎮從1到n編號。 

注意:兩個城市之間可以有多條道路相通,也就是說 

3 3 

1 2 

1 2 

2 1 

這種輸入也是合法的 

當n為0時,輸入結束,該用例不被處理。 

output對每個測試用例,在1行裡輸出最少還需要建設的道路數目。 

sample input

4 2

1 34 3

3 31 2

1 32 3

5 21 2

3 5999 0

0

sample output

102

998

huge input, scanf is recommended.

hint

hint

這題為並查集的模板題 只是讓我們求出最後有幾個根節點

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define maxn 1010

7int

a[maxn];

8int find(intr)9

13int

main()

1426

int sum=0;27

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

30 printf("

%d\n

",sum-1

);31}32

return0;

33 }

hdu1232 暢通工程

還是並查集,不過我覺得最後判斷最少路徑自己處理的麻煩了,得去看看大神 code id yueqiq prog numtri lang c include include include include include include include include include include i...

HDU 1232 暢通工程

題目大意 中文題 解題思路 最基礎的並查集,注意一點,雖然路徑優化了,但pre i 不一定就是最上級,所以最後查詢還得用find函式。該部落格詳盡的多 ac include include using namespace std int n,m,t1,t2,pre 1005 setse intfin...

HDU 1232 暢通工程

這題就是並查集的應用,我們可以假設n個城鎮之間皆無道路,那就要修建n 1條道路。每當我們已知兩個城鎮之間是連通的時候,我們就可以讓cnt 1,因為我們沒必要修建道路了。這樣的話我們就不用再壓縮路徑,判斷有多少的集合了。需要注意的一點是,對於並查集的連線,我們應該把它的祖先連線在一起,而不是把它們連線...