還是暢通工程 並查集 貪心

2022-06-11 06:09:08 字數 1428 閱讀 9469

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行給出兩個正整數,分別...

暢通工程 並查集演算法

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