最小生成树C++模板

来源:互联网 发布:单片机计分牌课设 编辑:程序博客网 时间:2024/06/06 11:47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//maxe保存了最大边数
structedge
{
intu,v,w;
 
booloperator<(constedge&b)const
{
returnthis->w>b.w;
}
}e[maxe];
 
//并查集相关
intf[maxn];
 
inlinevoidinit()
{
for(inti=0;i<maxn;i++)f[i]=i;
}
 
intfind(intx)
{
if(f[x]==x)returnx;
elsereturnf[x]=find(f[x]);
}
 
//主算法
intkruskal(intn,intm)
{
//n:点数,m:边数
//所有边已经预先储存在e数组里
sort(e,e+m);
init();
 
intans=0;
for(inti=0;i<m;i++)
{
intu=e[i].u,v=e[i].v,w=e[i].w;
if(find(u)==find(v))continue;
f[find(u)]=find(v);
ans+=w;
}
 
returnans;
}
0 0