模板 最小生成樹Kruskal

2022-05-01 00:45:11 字數 811 閱讀 3361

基本介紹

模板題目

**實現

最小生成樹問題一般有兩種解法 prim和kruskal 因為之前學過並查集所以果斷選擇先學後者

kruskal是一種利用並查集來求解最小生成樹的演算法 它將每乙個聯通塊當作乙個集合

先將邊按從小到大的順序排序 現在每乙個點都是孤立的 並且自己成為乙個集合 然後按排好的順序列舉邊 如果邊連著兩個集合 就加入最小生成樹 一直到選出來n-1條邊

用結構體儲存 起點 終點 長度

struct point;

point a[size];

自定義sort

bool cmp(point a,point b)

point[size];

ll n,m;

ll site,ans,total;

ll father[size];

inline ll read()

while(isdigit(ch))

return num*f;

}inline

void add(ll x,ll y,ll z)

inline

bool cmp(kruskal a,kruskal b)

inline

void unionn(ll x,ll y)

int main()

sort(point+1,point+site+1,cmp);

for(int i=1;i<=site;i++)

}printf("%d",ans);

}//coyg

模板 最小生成樹 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)

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

最小生成樹Kruskal演算法模板

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