您的位置:首页 > 其它

HDU 1301 Jungle Roads

2012-05-07 22:43 351 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1301

最简单的最小生成树

View Code

#include <stdio.h>
#include <stdlib.h>
int p[30];
int cnt,n;
typedef struct L
{
int a,b,d;
}L;
L r[1000];
int cmp(const void*a,const void*b){return (*(struct L*)a).d-(*(struct L*)b).d;}
int find(int x){return p[x]==x?x:p[x]=find(p[x]);}
int Kruskal()
{
int i,ans=0;
int x,y;
for(i=0;i<n;i++)p[i]=i;
qsort(r,cnt,sizeof(L),cmp);
for(i=0;i<cnt;i++)
{
x=find(r[i].a);
y=find(r[i].b);
if(x!=y){ans+=r[i].d;p[x]=y;}
}
return ans;
}
int main()
{
int m,i,j;
int dis;
char rt,lf;
while(scanf("%d%*c",&n),n)
{
cnt=0;
for(i=0;i<n-1;i++)
{
scanf("%c%d%*c",&rt,&m);
for(j=0;j<m;j++)
{
scanf("%c%d%*c",&lf,&dis);
r[cnt].a=rt-'A';
r[cnt].b=lf-'A';
r[cnt++].d=dis;
}
}
printf("%d\n",Kruskal());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: