ACM hdu 1232 暢通工程(並查集)

2022-05-13 03:36:03 字數 1011 閱讀 1209

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

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

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

3 31 2

1 22 1

這種輸入也是合法的

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

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

4 2

1 34 3

3 31 2

1 32 3

5 21 2

3 5999 0

0

102

998

hint

huge input, scanf is recommended.

浙大計算機研究生複試上機考試-2023年

解題思路:

給定節點(城鎮)之間的相連狀態(兩個城鎮之間是否有路),要求最小還需要建多少條路,使得所有的城鎮之間都有路,即從任意乙個城鎮可以到達其它任意乙個城鎮。把相連的城鎮分到乙個集合裡面,最後看一共分成了幾個集合(這裡假設為n),那麼意味著還需要建設n-1條路。

**:#include #include #include using namespace std;

int parent[1002];

void init(int n)//初始化

int find(int x)//尋找根節點

void unite(int x,int y)//連線,分集合

int main()

int count=0;

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

cout<

ACM HDU 1232 暢通工程 並查集

題目鏈結 題目分析 略 解題思路 找出結點共組成幾個集合,輸出集合數 1即為需要修建的道路條數。使用並查集。ac程式 c author 3stone acm hdu.1232 暢通工程 time 18 6 12 ide vs code include include include define m...

HDU 1232 暢通工程(並查集)

題意 有n個城鎮,已經現在已經有m條道路,每條道路連線兩個城鎮 可以重複連線 目標是使任意兩個城鎮間都可以實現交通 不一定有直接的道路相連,只要互相間接通過道路可達即可 求最少還需要建設多少條道路。本題看上去像圖的連通性問題,和圖論有關,但是其實不必用圖論的那些演算法解決。說這話是因為這是並查集配的...

並查集 HDU 1232 暢通工程

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