做法是使用并查集判环,地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1308

#include <stdio.h>

int point[14];

void make ( int n )
{

    
for ( int i=0; i<n; i++ )
    
{
        point[i] 
= -1;
    }

}


int find ( int a )
{

    
if ( point[a] < 0 )
    
{
        
return a;
    }

    
int r = find ( point[a] );
    point[a] 
= r;

    
return r;
}


void un ( int a, int b )
{

    
int ra = find ( a );
    
int rb = find ( b );

    
if ( point[ra] < point[rb] )
    
{
        point[ra] 
+= point[rb];
        point[rb] 
= ra;
    }

    
else
    
{
        point[rb] 
+= point[ra];
        point[ra] 
= rb;
    }

}


int num[14];
int len;
int hash[14];

void init ()
{

    len 
= 0;
    
for ( int i=0; i<14; i++ )
    
{
        hash[i] 
= 0;
    }

}


int main ()
{

    
int b, e;
    
int flag;
    
int count = 0;

    
while ( 1 )
    
{
        scanf ( 
"%d%d"&b, &e );
        
if ( b == -1 && e == -1 )
        
{
            
break;
        }


        flag 
= 1;
        init ();
        make ( 
14 );

        
while ( b || e )
        
{
            
if ( flag )
            
{
                
if ( ! hash[b-1] )
                
{
                    num[len
++= b-1;
                    hash[b
-1= 1;
                }

                
if ( ! hash[e-1] )
                
{
                    num[len
++= e-1;
                    hash[e
-1= 1;
                }


                
if ( find ( b-1 ) != find ( e-1 ) )
                
{
                    un ( b
-1, e-1 );
                }

                
else
                
{
                    flag 
= 0;
                }

            }

            scanf ( 
"%d%d"&b, &e );
        }

        
int r = find ( num[0] );
        
for ( int i=1; i<len; i++ )
        
{
            
if ( find ( num[i] ) != r )
            
{
                flag 
= 0;
                
break;
            }

        }

        
if ( flag )
        
{
            printf ( 
"Case %d is a tree.\n"++count );
        }

        
else
        
{
            printf ( 
"Case %d is not a tree.\n"++count );
        }

    }
     
    
return 0;
}