暢通工程 並查集演算法

2021-09-11 00:18:06 字數 680 閱讀 7674

馬上寒假還有七天都結束了,今天遇到了這個題目,好久都沒有寫部落格感覺都已經費了,今天就來寫一下部落格,算是紀念一下這個暑假(大概我已經費了),不說廢話了,現在步入正題

並查積是一種高效的資料結構,對於解決一些聯通性問題有著高效果的效率,演算法主要就三個部分,並查集由乙個整數型的陣列和兩個函式構成。陣列pre記錄了每個點的前導點是什麼,函式find是查詢,join是合併,其中設計一些路徑壓縮的演算法,就是對查詢進行優化處理使樹的層數都會維持在比較低的水平上,演算法本身好理解,但是真正運用到刷題上,要能夠靈活地運用

下面介紹乙個這個題目,就是將n條道路和m個村莊讓他們進行互相連線,目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可),就是求圖有幾個連通分支(連通塊),當時看見題目的第乙個想法就是用dfs求圖的連通分量,但是用並查集就會更加簡單

#include

int pre[1002];//記錄前導點

int find(int x)

//查詢根點

void merge(int x,int y)

//合併兩個點

int main()

for(count=-1, i=1;i<=n;i++)

if(pre[i]==i)

count++;

printf("%d\n",count);}}

並查集 暢通工程

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

並查集(暢通工程)

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

並查集的應用 暢通工程

暢通工程 includeint n,m,a,b int road 1010 int findroot int x int main for int i 1 i m i for int i 1 i n i printf d n sum 1 return 0 把連線在一起的一些結點看成是一棵樹,然後不斷...