跟发现它抓住它完全一样。
注意:
当发现同性恋时不能直接break,因为还有输入数据
#include <stdio.h>
#include <iostream>
#include <stack>
#include <string>
#include <set>
#include <memory.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <unordered_set>
using namespace std;
unordered_set <string> record[1005];
int N;
int num[2005], father[1000005], tag[1000005];
int FindFather( int i )
{
if( i == father[i] )
{
return i;
}
int tmp = FindFather( father[i] );
tag[i] = (tag[i] + tag[father[i]])%2;
father[i] = tmp;
return tmp;
}
int main()
{
scanf("%d", &N);
for( int j = 1; j <= N; j++ )
{
int n,k;
scanf("%d %d", &n, &k);
for( int i = 1; i <= n; i++ )
{
father[i] = i;
tag[i] = 0;
}
int flag = false;
while( k-- )
{
int a,b;
scanf("%d %d", &a, &b);
if(flag)continue;
int fa = FindFather(a);
int fb = FindFather(b);
if( fa == fb )
{
if( tag[a] == tag[b] )
{
flag = true;
continue;//不能直接break因为还要继续输入
}
else
{
continue;
}
}
else
{
father[fa] = fb;
tag[fa] = (tag[a] - tag[b] + 1)%2;
}
}
if(flag)
{
cout<<"Scenario #"<<j<<":"<<endl<<"Suspicious bugs found!"<<endl<<endl;
}
else
{
cout<<"Scenario #"<<j<<":"<<endl<<"No suspicious bugs found!"<<endl<<endl;
}
}
return 0;
}