| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 20643 | Accepted: 8697 |
Description
Input
Output
3 0 990 692 990 0 179 692 179 0 1 1 2
Sample Output
179
//252K 63MS
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define inf 0xfffffff
typedef struct node
{
int l,r;
int w;
bool operator < (const node &a) const
{
return w < a.w;
}
}node;
node p[10010];
int pre[110];
int n,m;
int num;//边的个数
int Find(int x)
{
return pre[x]==x?pre[x]:Find(pre[x]);
}
int Union(int a,int b)
{
int f1=Find(a),f2=Find(b);
if(f1!=f2)
{
pre[f1]=f2;
return 1;
}
return 0;
}
void kruskal()
{
int sum=0;
for(int i=0;i<num;i++)
{
if(!Union(p[i].l,p[i].r))
continue;
sum+=p[i].w;
}
printf("%d\n",sum);
}
int main()
{
scanf("%d",&n);
num=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
p[num].l=i;
p[num].r=j;
scanf("%d",&p[num++].w);
}
}
for(int i=0;i<=n;i++)
pre[i]=i;
scanf("%d",&m);
int a,b;int f1,f2;
while(m--)
{
scanf("%d%d",&a,&b);
Union(a,b);
}
sort(p,p+num);
kruskal();
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
poj 2421 Constructing Roads(kruskal)(基础)
原文地址:http://blog.csdn.net/kaisa158/article/details/46998251