题目意思就是 给定n只虫子 不同性别的可以在一起 相同性别的不能在一起
给你m对虫子 判断中间有没有同性别在一起的;
我们把同性的放到一个集合里 如果一个集合里出现了异性 则说明存在同性恋在一起
假设 x 为一种性别 x+n为与其相反的性别
若a,b为同性 的 我们则可以把判断 (a,b+n) (b,a+n)为异性反之亦然;
代码如下
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 5010;
int pre[maxn];
void init(int n)
{
for(int i = 0;i <= n; i++)
pre[i] = i;
}
int findx(int x)
{
if(x == pre[x])
return x;
return findx(pre[x]);
}
void marge(int x,int y)
{
x = findx(x);
y = findx(y);
if(x != y)
pre[x] = y;
}
int judge(int x,int y)
{
x = findx(x);
y = findx(y);
if(x != y)
return 1;
return 0;
}
int main()
{
int t,cas = 1;
scanf("%d",&t);
while(t--)
{
int n,m,l = 1;
scanf("%d %d",&n,&m);
init(2 * n);
for(int i = 0;i < m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
if(judge(x,y) || judge(x+n,y+n))
{
marge(x,y+n);
marge(y,x+n);
}
else l = 0;
}
if(cas != 1)
printf("\n");
printf("Scenario #%d:\n",cas++);
if(l)
printf("No suspicious bugs found!\n");
else
printf("Suspicious bugs found!\n");
}
return 0;
}