LeeBlog

导航

HDU 1272 小希的迷宫

这题数据真是恶心,开始敲出来了,一直WA,后来重敲一遍还是WA,最后看小白的代码才知道,还有( 0 0 ) 这种恶心的数据

#include<stdio.h>
#include<string.h>
int set[100005],des[100005],f;
int find( int x )
{
    return set[x] == x ? x : set[x] = find( set[x] );
}
void merge( int x,int y )
{
     int a = find( x ),b = find( y );
     if( a != b )
         set[a] = b;
     else if( x != y )//防止(1 1) 且判断两点之间是否只有一条通路
         f = 1;
 }
int main( )
{
    int n,m,max;
    while( scanf( "%d%d",&n,&m ),n+m != -2 )
    {
           int t = 0;
           memset( des,0,sizeof( des ) );
           f  = max = 0;
           for( int i = 0; i <= 100005; ++i )
                set[i] = i;
           des[n] = des[m] = 1;
           merge( n,m );
           max = n > m ? n : m;
           while( ( n | m ) && scanf( "%d%d",&n,&m ),n|m )
           {
                  merge( n,m );
                  t = des[n] = des[m] = 1;
                  int c = n > m ? n : m;
                  max = c > max ? c: max;
                  }
           int c = 0;
           if( !t )//防止恶心数据
           {
               puts( "Yes" );
               continue;
           }
           for( int i = 0; i <= max ; ++i )//看有没有全部连通
                if( des[i] )
                    if( set[i] == i )
                        ++c;
           
           if( c != 1 )
               f = 1;
           if( !f )
               puts( "Yes" );
           else
               puts( "No" );
           }
    return 0;
}

posted on 2011-04-29 22:34  LeeBlog  阅读(201)  评论(0编辑  收藏  举报