最小生成樹MST

2022-05-01 11:30:10 字數 1029 閱讀 4728

description

生成樹:乙個有n個結點的連通圖的生成樹是原圖的極小連通子圖,包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。

最小生成樹:生成樹中權值最小的一種方案。

給定乙個無向圖,請輸出最小生成熟的權值。

存在重邊

input

第一行包含三個整數n、m,分別表示點的個數、邊的個數;

接下來m行每行包含三個整數fi、gi、wi,分別表示第i條邊的兩個點和長度。

output

輸出最小生成熟的權值,如果答案不存在,請輸出-1。

sample input

461

2223

2241

1353

4314

4

sample output
5

hint

對於100%的資料:n<=1000,m<=400000

source
#include using

namespace

std;

intn,m;

struct

point

;point p[

400001

];int f[1001

];bool

cmp(point x,point y)

int find(int

x)int

main()

sort(p+1,p+1+m,cmp);

for(int i=0;i<=n;i++)

f[i]=i;

int ans=0,cnt=0

;

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

}if(cnt=n-1

) cout

else cout<<-1

}

最小生成樹(MST)

在帶權圖中,所有的生成樹中邊權的和最小的那棵 或幾棵 被稱為最小生成樹。幾點注意 求最小生成樹使用kruskal演算法。使用並查集處理節點的集合屬性,初始時所有結點屬於只包含其自身的孤立集合。實現 include include using namespace std define n 101 in...

最小生成樹 MST

1 prim演算法 對點進行貪心操作。適合稠密圖 const int m 1005 int vis m 表示該i點是否被選擇 vis i 0 還未被選擇 int map m m map i j 表示i到j的距離 int dis m 1到i的距離和 void prim cout sum 2 krusk...

最小生成樹MST

最小生成樹是在一張無向連通圖中,找到一棵樹,使得其邊的代價之和最小。注 可能存在多個最小生成樹。以邊為展開,將圖中的最小代價邊嘗試加入集合tree中,並且該邊不能與集合tree中的邊形成環,如此迭代,最終得到的集合tree為mst。因此可以採用並集查的方式實現kruskal演算法 以點為展開,將圖中...