最小生成樹 模板

2021-10-24 18:26:05 字數 1558 閱讀 7349

將邊的權值從小到大排序,依次取邊,需要該邊上的點是否已經連通(查並集)。

適用稀疏圖,邊少點多。

#include

#include

using

namespace std;

const

int maxn=

1e4+4;

const

int maxm=

1e6+6;

int n,m;

int f[maxn]

;int

find

(int x)

struct node

;bool

cmp(node a,node b)

node a[maxm]

;int

main()

sort

(a+1

,a+1

+m,cmp)

;int k=

0,ans=0;

for(

int i=

1;i<=m;i++

)//kk==n-

1? cout<"orz"

;return0;

}

從任意點開始,遍歷此點的所有邊,選此時生成樹權值最小的一條進行連線。

適用稠密圖,邊多點少。

/*

prim演算法

從任意點開始,遍歷此點的所有邊,選權值最小的一條進行連線

*/#include

using

namespace std;

const

int maxm=

1e6+5;

const

int maxn=

1e3+5;

const

int inf=

1e9;

struct edge

;edge e[maxm<<1]

;int head[maxn]

,dis[maxn]

,cnt=

1,n,m,vis[maxn]

;inline

void

add(

int u,

int v,

int w)

intmain()

for(

int i=

2;i<=n;i++

)//從1開始

dis[i]

=inf;

for(

int i=head[1]

;i;i=e[i]

.next)

//從1開始

int count=0;

long

long ans=0;

int now=1;

while

(++count} ans+

=min1;

//列舉now的所有連邊,更新dis陣列

for(

int j=head[now]

;j;j=e[j]

.next)

} cout

}

最小生成樹模板

prim演算法理解可以參考部落格 prim演算法模板 int prime int v int i,j,sum 0,min,k sum是權重和 for i 1 i n i lowcost i 表明當前狀態下在u內距離v點 s中各點 距離的最小值,每個u中點s 中點 都計算 lowcost i map ...

最小生成樹 模板

const int maxn 1010 const int maxm 200020 struct edge edges maxm int father maxn int find int x int cmp edge a,edge b 將邊按權值排序 int kruskal int n,int m ...

模板 最小生成樹

題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...