第二週HDU 1232題解

2021-09-03 01:21:39 字數 572 閱讀 2480

輸入兩個正整數n,m,n為城鎮數對應城鎮編號,m為兩座城鎮之間的道路數,輸入m組,每組兩個城鎮編號,表示之間有道路連通,求還需要建多少條道路能使每個城鎮之間,不一定有直接的道路相連,只要互相間接通過道路可達即可。

ac通過的c++語言程式如下:

#include

using

namespace std;

int city[

1000];

void

build

(int

,int);

intfind

(int);

intmain()

for(

int i =

0; i < n; i++)if

(city[i]

== i) t++

; cout << t -

1<< endl;

}return0;

}void

build

(int x,

int y)

intfind

(int x)

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,因為我們沒必要修建道路了。這樣的話我們就不用再壓縮路徑,判斷有多少的集合了。需要注意的一點是,對於並查集的連線,我們應該把它的祖先連線在一起,而不是把它們連線...