LeeBlog

导航

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;
}

posted on 2011-05-02 13:35  LeeBlog  阅读(180)  评论(0编辑  收藏  举报