Background 
Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, individual bugs and their interactions were easy to identify, because numbers were printed on their backs. 
Problem 
Given a list of bug interactions, decide whether the experiment supports his assumption of two genders with no homosexual bugs or if it contains some bug interactions that falsify it.

Input

The first line of the input contains the number of scenarios. Each scenario starts with one line giving the number of bugs (at least one, and up to 2000) and the number of interactions (up to 1000000) separated by a single space. In the following lines, each interaction is given in the form of two distinct bug numbers separated by a single space. Bugs are numbered consecutively starting from one.

Output

The output for every scenario is a line containing "Scenario #i:", where i is the number of the scenario starting at 1, followed by one line saying either "No suspicious bugs found!" if the experiment is consistent with his assumption about the bugs' sexual behavior, or "Suspicious bugs found!" if Professor Hopper's assumption is definitely wrong.

Sample Input

2
3 3
1 2
2 3
1 3
4 2
1 2
3 4

Sample Output

Scenario #1:
Suspicious bugs found! Scenario #2:
No suspicious bugs found!

Hint

Huge input,scanf is recommended.
 
【题意】:Hopper 在研究某种稀有虫子的性行为。他假设虫子们有两种不同的性别,而且它们只跟异性发生关系。
在他的试验里,每个虫子和它的性行为都很容易辨认,因为它们的背后印着号码。
给出一些虫子的性行为,确定是否有同性恋的虫子能推翻这个假设。某物种n只,m个描述,表示x,y为异性,判断是否有同性交配。如果发现存在同性交配输出bugs found.
【分析】:

理论上这一题和HDU-1829应该都有两种方法,一个是设置两个并查集,将冲突的两个虫子合并入两个不同的并查集中,在合并的过程中如果发现合并冲突则表明出现问题,直接记录。
第二种方法则是同时记录偏移量和合并元素,倘若出现新输入的两个元素位于同一集合且偏移量相同,表明该两个元素与同一个元素都有交集,加上他们自身也有交集,表明他们同性恋,存在bug。
【代码】:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string> using namespace std;
const int maxn = ;
int fa[maxn],r[maxn];
int n,m,a,b;
void init()
{
for(int i=;i<=n;i++)
{
fa[i]=i;
r[i]=;
}
} int find(int x)
{
if(fa[x]==x) return x;
else
{
int rt=find(fa[x]);
// fa[x]=find(fa[x]);
r[x]=r[x]^r[fa[x]];
return fa[x]=rt;
}
return fa[x];
} void join(int x,int y)
{
int fx=find(x);
int fy=find(y);
fa[fx]=fy;
r[fx]= (!(r[y]^r[x]));
/*fa[fy]=fx;
r[fy]=(1+r[y]+r[x])%2;*/
} int main()
{
int t,flag;
int cas=;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
init();//注意初始化!
flag=;
for(int i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(find(a)!=find(b))//根不同就合并
{
join(a,b);
}
else
{
if(r[a]==r[b])//r[x]=r[y]可推出x和y同性,那么就说明存在bug。详见代码:
flag=;
}
if(flag) continue;
} printf("Scenario #%d:\n",++cas); if(flag)
printf("Suspicious bugs found!\n");
else
printf("No suspicious bugs found!\n"); printf("\n");
}
}

位运算版类别偏移

最新文章

  1. LaTeX用dvi编译,Yap浏览器弹出对话框,决解办法(傻瓜教程)
  2. 《AngularJS权威教程》中关于指令双向数据绑定的理解
  3. [SystemC] Setting Up the Environment
  4. Redis教程(十一):虚拟内存介绍:
  5. sip_hangup_disposition
  6. 应用框架的设计与实现——.NET平台(10 授权服务.CodeAccessSecurityAttribute)
  7. 使用eclipse上传项目到开源中国代码托管Git@osc教程
  8. c# 获取excel所有工作表
  9. cocos2dx中的背景图层CCLayerColor和渐变图层CCLayerGradient
  10. QT的文本加密方法(寒山居士)
  11. 我的开源框架之Accordion控件
  12. ps 导出png-8图片会变模糊
  13. PHP 实例 AJAX RSS 阅读器
  14. UI设计切忌墨守成规,但改变也须用数据说话
  15. python将整数均分成N等分
  16. 【搜索2】P1706 全排列问题
  17. BootStrap的table技术小结:数据填充、分页、列宽可拖动
  18. javascript html页面中的内容替换
  19. SQL Script
  20. Django中的class Meta

热门文章

  1. xinetd不太详的详解
  2. [CF327E]Axis Walking([洛谷P2396]yyy loves Maths VII)
  3. [Leetcode] word ladder 单词阶梯
  4. git使用笔记(十)杂项
  5. last_query_cost
  6. nginx反向代理Tomcat/Jetty获取客户端IP地址
  7. WebOS系列-了解Wekbit【邓侃】
  8. React 使用 fetch 请求天气
  9. oracle导入和导出和授权
  10. Spring - IoC(10): 生命周期