A Bug’s Life
题目链接
#include <stdio.h>
#define max 2200
int pre[ max] , rank[ max] ;
int find ( int x)
{
if ( x!= pre[ x] )
{
int px= find ( pre[ x] ) ;
rank[ x] = ( rank[ x] + rank[ pre[ x] ] ) % 2 ;
pre[ x] = px;
}
return pre[ x] ;
}
int merge ( int x, int y)
{
int dx= find ( x) ;
int dy= find ( y) ;
if ( dx== dy)
{
if ( ( rank[ x] + rank[ y] ) % 2 == 0 )
return 1 ;
else
return 0 ;
}
else
{
pre[ dy] = dx;
rank[ dy] = ( rank[ x] + rank[ y] + 1 ) % 2 ;
}
return 0 ;
}
int main ( )
{
int t, num= 0 , n, m, i;
scanf ( "%d" , & t) ;
while ( t-- )
{
num++ ;
scanf ( "%d %d" , & n, & m) ;
for ( i= 0 ; i<= n; i++ )
{
pre[ i] = i;
rank[ i] = 0 ;
}
int flag= 0 , a, b;
for ( i= 1 ; i<= m; i++ )
{
scanf ( "%d %d" , & a, & b) ;
if ( merge ( a, b) )
flag= 1 ;
}
printf ( "Scenario #%d:\n" , num) ;
if ( flag)
printf ( "Suspicious bugs found!\n\n" ) ;
else
printf ( "No suspicious bugs found!\n\n" ) ;
}
return 0 ;
}