main.cc 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4. const int N = 2000;
  5. struct UF {
  6. int id[2 * N + 1];
  7. int sz[2 * N + 1];
  8. } uf;
  9. int find(int i) {
  10. if (i == uf.id[i]) return i;
  11. int j = find(uf.id[i]);
  12. uf.id[i] = j;
  13. return j;
  14. }
  15. bool is_join(int i, int j) { return find(i) == find(j); }
  16. void join(int i, int j) {
  17. i = find(i);
  18. j = find(j);
  19. if (i == j) return;
  20. if (uf.sz[i] < uf.sz[j]) {
  21. uf.id[i] = j;
  22. } else {
  23. if (uf.sz[i] == uf.sz[j]) uf.sz[i]++;
  24. uf.id[j] = i;
  25. }
  26. }
  27. int main() {
  28. int S;
  29. scanf("%d", &S);
  30. for (int s = 1, n, k; s <= S; s++) {
  31. scanf("%d %d", &n, &k);
  32. for (int i = 1; i <= n; i++) {
  33. uf.id[i] = i;
  34. uf.id[i + N] = i + N;
  35. }
  36. memset(uf.sz, 0, sizeof(uf.sz));
  37. bool is_find = false;
  38. for (int i = 0, x, y; i < k; i++) {
  39. scanf("%d %d", &x, &y);
  40. if (is_find) continue;
  41. if (is_join(x, y)) {
  42. is_find = true;
  43. continue;
  44. }
  45. join(x, y + N);
  46. join(y, x + N);
  47. }
  48. if (is_find)
  49. printf("Scenario #%d:\nSuspicious bugs found!\n\n", s);
  50. else
  51. printf("Scenario #%d:\nNo suspicious bugs found!\n\n", s);
  52. }
  53. return 0;
  54. }