int pre[111];
int n,m;
struct edge
{
int from,to,cost;
}E[111*111];
void init()
{
for(int i=0;i<=n;i++)
pre[i]=i;
}
int find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];
return r;
}
void join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy)
pre[fx]=fy;
}
bool same(int x,int y)
{
return find(x)==find(y);
}
bool cmp(edge a,edge b)
{
return a.cost<b.cost;
}
long long Kruskal()
{
long long ans=0;
sort(E+1,E+m+1,cmp);
for(int i=0;i<=m;i++)
{
if(same(E[i].from,E[i].to))
continue;
join(E[i].from,E[i].to);
ans+=E[i].cost;
}
return ans;
}
最小生成树模板
最新推荐文章于 2019-07-27 22:50:00 发布