problem description
某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可),並要求鋪設的公路總長度為最小。請計算最小的公路總長度。
input
測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( < 100 );隨後的n(n-1)/2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到n編號。 當n為0時,輸入結束,該用例不被處理。
output
對每個測試用例,在1行裡輸出最小的公路總長度。
sample input
31 2 1
1 3 2
2 3 4
41 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0sample output35
[hint]hint[/hint]
huge input, scanf is recommended.
本題可以使用prim演算法去解決,但是為了加強自己的並查集,所以,本題使用並查集解決。
本題可以通過並查集+貪心解決,先將路徑短的排序,再一次解決連成環的問題。以下**自己敲寫,但是不知是sort超時還是什麼特別的原因,杭電oj無法通過,超時。
#include #include #include#includeusing namespace std;
int f[1005];
struct node
d[1005];
bool cmp(node a, node b)
int find(int x)
void bing(int x, int y)
int main()
} printf("%d\n", cnt);
} return 0;
}
於是,在借鑑他人寫法後,改進自己的sort,完美通過。
借鑑比較來自:
#include #include #include#includeusing namespace std;
int f[1005];
int cnt;
struct p
}d[5005];
int find(int x)
void bing(int x, int y,int z)
int main()
return 0;
}
並查集 暢通工程
problem description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input 測試輸入包含若干測試用例。...
並查集(暢通工程)
某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別...
暢通工程 並查集演算法
馬上寒假還有七天都結束了,今天遇到了這個題目,好久都沒有寫部落格感覺都已經費了,今天就來寫一下部落格,算是紀念一下這個暑假 大概我已經費了 不說廢話了,現在步入正題 並查積是一種高效的資料結構,對於解決一些聯通性問題有著高效果的效率,演算法主要就三個部分,並查集由乙個整數型的陣列和兩個函式構成。陣列...