HDU 1233 还是畅通工程
这题是一个最小生成树,用kustra做,在给结构体排序时要用快排,不能冒泡,否则超时,这里有我冒泡的代码,你可以提交试试
#include<stdio.h>
#include<stdlib.h>
int set[105],n,m,sum;
struct e
{
int x,y,v;
}val[10000];
int cmp( const void *a,const void *b )
{
return ( ( e * )a )-> v - ( ( e * )b ) ->v;
}
int find( int x )
{
return x == set[x] ? x : set[x] = find( set[x] );
}
void Kustra( )
{
for( int i = 0; i < m; ++i )
{
int a = val[i].x,b = val[i].y,v = val[i].v;
if( find( a ) != find( b ) )
{
sum += v;
set[find( a )] = find( b );
}
}
}
int main( )
{
while( scanf( "%d",&n ),n )
{
sum = 0;
m = n * ( n - 1 ) / 2;
for( int i = 0; i <= n; ++i )
set[i] = i;
for( int i = 0 ; i < m; ++i )
scanf( "%d%d%d",&val[i].x,&val[i].y,&val[i].v );//printf( "n = %d\n",n );
/*for( int i = 0,f; i < m - 1; ++i )
{
f = 0;
for( int j = 1; j < m; ++j )
if( val[j-1].v > val[j].v )
{
struct e c;
c = val[j-1];
val[j-1] = val[j];
val[j] = c;
f = 1;
}
if( !f )
break;
}*/
qsort( val,m,sizeof( val[0] ),cmp );
Kustra( );
printf( "%d\n",sum );
}
return 0;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号