Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1121 Accepted Submission(s):
365
#include<stdio.h>
#include<algorithm>
using namespace std;
int set[1100];
struct record
{
int beg;
int end;
int money;
}s[11000];
int find(int fa)
{
int ch=fa;
int t;
while(fa!=set[fa])
fa=set[fa];
while(ch!=fa)
{
t=set[ch];
set[ch]=fa;
ch=t;
}
return fa;
}
void mix(int x,int y)
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx!=fy)
set[fx]=fy;
}
bool cmp(record a,record b)
{
return a.money<b.money;
}
int main()
{
int n,m,j,i,sum,village,road;
while(scanf("%d%d",&village,&road)!=EOF)
{
for(i=0;i<village;i++)
set[i]=i;
for(i=0;i<road;i++)
{
scanf("%d%d%d",&s[i].beg,&s[i].end,&s[i].money);
}
sort(s,s+road,cmp);
sum=0;
for(i=0;i<road;i++)
{
if(find(s[i].beg)!=find(s[i].end))
{
mix(s[i].beg,s[i].end);
sum+=s[i].money;
}
}
m=0;
for(i=0;i<village;i++)
{
if(set[i]==i)
m++;
}
if(m>1)
printf("impossible\n\n");
else
printf("%d\n\n",sum);
}
return 0;
}
hdoj 2122 Ice_cream’s world III
原文:http://www.cnblogs.com/tonghao/p/4481673.html