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;
}
posted @ 2011-09-19 11:28  wutaoKeen  阅读(179)  评论(0编辑  收藏  举报