题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863
题目思路:最小生成树。。跟前面写的那个差不多,稍微修改修改就行
AC代码:
#include<stdio.h>
#include<stdlib.h>
int f[101];
int find(int a)
{
if(f[a]!=a)
f[a]=find(f[a]);
return f[a];
}
struct hh
{
int a,b,w;
}road[5000];
int cmp(const void *a,const void *b)
{
return (*(struct hh *)a).w - (*(struct hh *)b).w;
}
int main()
{
int n,m;
while(~scanf("%d%d",&m,&n))
{
if(m==0)break;
int i,j=0,ans=0;
for(i=0;i<=n;i++)
f[i]=i;
for(i=0;i<m;i++)
scanf("%d%d%d",&road[i].a,&road[i].b,&road[i].w);
qsort(road,m,sizeof(road[0]),cmp);
int fa,fb;
for(i=0;i<m;i++)
{
fa=find(road[i].a);
fb=find(road[i].b);
if(fa!=fb)
{
ans+=road[i].w;
f[fa]=fb;
j++;
}
}
if(j==n-1)printf("%d\n",ans);
else printf("?\n");
}
return 0;
}
AC截图: