跟发现它抓住它完全一样。
注意:
当发现同性恋时不能直接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; }