最小生成樹(模板 Kruskal)

2022-08-15 08:12:17 字數 1104 閱讀 6168

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

**如下:

1 # include2 # include3 # include4 # include5

using

namespace

std;

6const

int n=105;7

const

int inf=1

<<30;8

struct

edge914

};15

intpre[n],n,head[n],cnt;

16 edge e[n*(n-1)+5

];17

void add(int fr,int to,int

w)18

25int fin(int

x)26

31void

kruskal()

3244

}45 printf("

%d\n

",ans);46}

47int

main()

4861

kruskal();62}

63return0;

64 }

view code

模板 最小生成樹 Kruskal

兩種寫法 第一種 使用陣列 時間複雜度 o nlogn includeusing namespace std define max 200000 10 int n,m n 結點的數量 m 邊的數量 int u max v max w max r max p max u i v i 第i條邊的兩端點,...

模板 最小生成樹Kruskal

基本介紹 模板題目 實現 最小生成樹問題一般有兩種解法 prim和kruskal 因為之前學過並查集所以果斷選擇先學後者 kruskal是一種利用並查集來求解最小生成樹的演算法 它將每乙個聯通塊當作乙個集合 先將邊按從小到大的順序排序 現在每乙個點都是孤立的 並且自己成為乙個集合 然後按排好的順序列...

最小生成樹Kruskal演算法模板

利用陣列fa來記錄各個節點的父節點,初始化為自己 通過sort排序,從邊長最短到最長 for 邊長 判斷 如果邊的兩個端點的父節點不相同,可選 把選過的邊的兩端點中,大序號的父節點處理為小序號的父節點 include include using namespace std define n 28 i...