HDU 1232 暢通工程 並查集經典模板題

2022-08-21 05:33:11 字數 970 閱讀 7692

problem description

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

input

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

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

3 31 2

1 22 1

這種輸入也是合法的

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

output

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

sample input

4 2

1 34 3

3 31 2

1 32 3

5 21 2

3 5999 0

0sample output

102

998

#includeusing namespace std;

int pre[1000];//記錄每個點的前導點

int find(int x)//查詢根節點

return r;

}void join(int x,int y)//判斷x、y是否連通(此題只單獨寫乙個函式解釋,題目中不使用函式)

int main()

//如果兩點已經連通了,那麼這條路只是在圖上增加了乙個環

//對連通性沒有任何影響,無視掉

} //最後輸出還要修的路條數

printf("%d\n",total);

} return 0;

}

HDU 1232 暢通工程(並查集)

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

並查集 HDU 1232 暢通工程

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

HDU1232 暢通工程 並查集問題

所謂並查集,就是指查詢無向圖或是有向圖中各個點的聯通與否,其中可以分為兩個部分,乙個是根節點的尋找,乙個是聯通過程。首先在根節點的尋找中使用儲存前驅節點資訊的數pre,逐層詢問,直到最上的點 如果兩個點的最上的點不同那麼就需要將他們聯通,聯通的方法就是將其中乙個最上點的前驅節點轉為另乙個最上點,這要...