模板 最小生成樹 Kruskal

2021-09-09 07:24:45 字數 856 閱讀 6378

兩種寫法

第一種:使用陣列

/*

時間複雜度: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條邊的兩端點,w[i]第i條邊的權值,r[i]第i小的邊的序號,p[i]並查集

int cmp(const int i, const int j) //間接排序函式

int find(int x) //並查集的find

int kruskal() }

return ans;

}int main()

cout<第二種:使用結構體

/*時間複雜度:o(nlogn)

*/#includeusing namespace std;

#define max 200000+10

struct edge

;edge a[max];

int n,m,ans=0,p[max];

bool cmp(edge x,edge y)

kruskal();

cout

} /*

洛谷 p3366

輸入:4 5

1 2 2

1 3 2

1 4 3

2 3 4

3 4 3

輸出:7

*/

模板 最小生成樹Kruskal

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

最小生成樹(模板 Kruskal)

description 某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 並要求鋪設的公路總長度為最小。請計算最小的公路總長度。input 測試輸入包含若干測試用例。每個測...

最小生成樹Kruskal演算法模板

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