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