HDU 1301 Jungle Roads

这题就是是一个最小生成树问题,题目意思,给你一个数n接下来有n-1行,每一行代表一个地点与多个地点相连结,例如:A 2 B 12 I 25
代表A与连接2地方B,I并且价钱为12,25;

#include<stdio.h>
#include
<stdlib.h>
struct t
{
int x,y,time;
}kru[
1024];
int set[27];
int find( int x )
{
return set[x]==x?x:set[x]=find( set[x] );
}
int cmp( const void *a,const void *b )
{
return ( ( t * )a )->time-( ( t * )b )->time;
}
int kruscal( int n )
{
int sum=0,X,Y;
for( int i=0;i<n;i++ )
{
if( ( X=find( kru[i].x ) )!=( ( Y=find( kru[i].y ) ) ) )
{
set[Y]=X;
sum
+=kru[i].time;
}
}
return sum;
}
int main( )
{
int n,m,time;
char c,s;
while( scanf( "%d",&n ),n )
{
int count=0;
for( int i=0;i<27;i++ )
set[i]=i;
for( int i=1;i<n;i++ )
{
getchar();
scanf(
"%c%d",&c,&m );
for( int j=0;j<m;j++ )
{
getchar();
scanf(
"%c%d",&s,&time);
kru[count].x
=c-'A';
kru[count].y
=s-'A';
kru[count].time
=time;
count
++;
}
}
qsort( kru,count,
sizeof( kru[0] ),cmp );
printf(
"%d\n",kruscal( count ) );
}
return 0;
}

转载于:https://www.cnblogs.com/bo-tao/archive/2011/09/19/2181084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值