| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Kruskal 并查集做的 为神马wa ...#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef struct
{
int x,y,len;
}Node;
int n,k;
Node road[100000];
int father[100000];
int find(int x)
{
while (father[x]!=x)
{
x=father[x];
}
return x;
}
int cmp(Node a,Node b)
{
return (a.len<b.len);
}
long long Kruskal()
{
int a,b,count;
long long sum=0;
sort(road+1,road+1+k,cmp);
for (int i=1;i<=n;i++) father[i]=i;
for (int i=1;i<=k;i++)
{
if (road[i].x==road[i].y) continue;
a=find(road[i].x);
b=find(road[i].y);
if (a!=b)
{
sum+=road[i].len;
father[b]=a;
count++;
}
if (count==n-1) break;
}
return sum;
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
int tmp;
k=1;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
scanf("%d",&tmp);
road[k].x=i;
road[k].y=j;
road[k].len=tmp;
k++;
}
}
cout<<Kruskal()<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator