解答:
#include <stdio.h>
int fa[2005];
int opp[2005];
int find(int x) {
if (fa[x] != x) {
fa[x] = find(fa[x]);
}
return fa[x];
}
void init(int x) {
for (int i = 1; i <= x; i++) {
fa[i] = i;
opp[i] = 0;
}
}
void merge(int x, int y) {
int x1 = find(x);
int y1 = find(y);
if (x1 != y1) {
fa[y1] = x1;
}
}
int main() {
int n, m, t, x, y;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d %d", &m, &t);
init(m);
int suspicious = 0;
for (int j = 1; j <= t; j++) {
scanf("%d %d", &x, &y);
if (suspicious!=0) {
continue;
}
if (find(x) == find(y)) {
suspicious = 1;
} else {
if (opp[x] == 0) {
opp[x] = y;
}
if (opp[y] == 0) {
opp[y] = x;
}
merge(x, opp[y]);
merge(y, opp[x]);
}
}
printf("Scenario #%d:\n", i);
if (suspicious) {
printf("Suspicious bugs found!\n");
} else {
printf("No suspicious bugs found!\n");
}
printf("\n");
}
return 0;
}