馬上寒假還有七天都結束了,今天遇到了這個題目,好久都沒有寫部落格感覺都已經費了,今天就來寫一下部落格,算是紀念一下這個暑假(大概我已經費了),不說廢話了,現在步入正題
並查積是一種高效的資料結構,對於解決一些聯通性問題有著高效果的效率,演算法主要就三個部分,並查集由乙個整數型的陣列和兩個函式構成。陣列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 把連線在一起的一些結點看成是一棵樹,然後不斷...