版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/42870669

http://acm.hdu.edu.cn/showproblem.php?pid=1829

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <iomanip>

using namespace std;

int t, n, m;
int fa[2200];
int sex[2200];//sex[i]=j 表示i与j性别相反
int a, b;
int ok;

int findd(int x)
{
    if (x == fa[x])
        return x;
    else
        return findd(fa[x]);
}

void un(int x, int y)
{
    int fx = findd(x);
    int fy = findd(y);

    if (fx == fy)//同性的
    {
        return;
    }
    else
    {
        if (fy > fx)
            fa[fy] = fx;
        else 
            fa[fx] = fy;
    }
}

int cases = 1;

int main()
{
    scanf("%d",&t);
    while (t--)
    {
        ok = 1;
        scanf("%d %d", &n, &m);
        {
            for (int i = 1; i <= n; i++)
            {
                fa[i] = i;    
            }
            memset(sex,0,sizeof(sex));

            for (int i = 1; i <= m;i++)
            {
                scanf("%d%d",&a,&b);
                if (!ok)
                    continue;
                if (findd(a) == findd(b))//同性的
                {
                    ok = 0;
                    continue;
                }

                if (sex[a] == 0)
                {
                    sex[a] = b;
                }
                else
                {
                    un(sex[a], b);
                }

                if (sex[b] == 0)
                {
                    sex[b] = a;
                }
                else
                {
                    un(sex[b], a);
                }
            }
        }

        if (!ok)
        {
            printf("Scenario #%d:\n",cases++);
            puts("Suspicious bugs found!");
            printf("\n");
        }
        else
        {
            printf("Scenario #%d:\n",cases++);
            puts("No suspicious bugs found!");
            printf("\n");
        }
    }
    return 0;
}