最小生成樹 模板 kruskal演算法和prim演算法

2021-10-09 03:43:10 字數 1844 閱讀 4855

看了大佬的部落格然後自己寫了遍感覺還是有點不懂

那就先放在在這裡以後慢慢看

原題鏈結

題目描述

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出 orz。

輸入格式

第一行包含兩個整數 n,m,表示該圖共有 n 個結點和 m 條無向邊。

接下來 m 行每行包含三個整數 xi,yi,zi,表示有一條長度為zi的無向邊連線結點 xi,yi

輸出格式

如果該圖連通,則輸出乙個整數表示最小生成樹的各邊的長度之和。如果該圖不連通則輸出 orz。

輸入輸出樣例

輸入4 5

1 2 2

1 3 2

1 4 3

2 3 4

3 4 3輸出7

/**

**最小生成樹的kruskal演算法

**參考紫書

**/#include

using

namespace std;

typedef

long

long ll;

const ll maxn=

1e6+5;

struct nodeedge[maxn]

;int p[maxn]

;bool

comp

(const node&a,

const node&b)

intmyfind

(int x)

intkruskal

(int n,

int m)

}return ans;

}int

main()

cout<<

kruskal

(n,m)

<<

"\n"

;return0;

}

/**

**最小生成樹的prim演算法

**堆優化

**/#include

using

namespace std;

typedef

long

long ll;

const ll maxn=

1e6+5;

const ll inf=

0x7fffffff

;struct edgee[maxn]

;int head[maxn]

,vis[maxn]

;int cnt,ans;

void

add(

int u,

int v,

int w)

int dis[maxn]

;typedef pair<

int,

int> pii;

priority_queue

,greater

> q;

//greater表示內建型別從大到小排序

intprim

(int n)}}

return ans;

}int

main()

cout<<

prim

(n)<<

"\n"

;return0;

}/*注這裡的**

typedef pairpii;

priority_queue,greater> q;

等同於struct heapnode

};紫書p361上有說明

*/

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

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