最小生成树

来源:互联网 发布:java的基础知识 编辑:程序博客网 时间:2024/06/08 08:19
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int m, n=1, fa[101], ans=0;
struct p{
int x, y, t;
}a[10001];
int fifa(int x)
{
if(fa[x]==x) return x;
return fifa(fa[x]);
}
int hhh(p a, p b)
{
return a.t<b.t;
}
int main()
{
cin>>m;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
cin>>a[n].t;
if(a[n].t!=0&&i<j)
{a[n].x=i;a[n].y=j;n++;}
}
for(int i=1;i<=m;i++) fa[i]=i;
sort(a+1, a+n, hhh);
for(int i=1;i<n;i++)
{
int p=fifa(a[i].x), q=fifa(a[i].y);
if(p!=q){
m--;ans+=a[i].t;fa[p]=q;
}
if(m==1) break;
}
cout<<ans<<endl;
return 0;
}
2 0
原创粉丝点击