poj2492A Bug's Life
来源:互联网 发布:上帝之眼网络摄像头app 编辑:程序博客网 时间:2024/06/07 04:43
一位伟大的教授想研究一群生物中是否存有同性恋,他以假设法来做这项实验。他每次将两个生物放到一起交配并假设他俩为异性,一旦这个假设出现了矛盾,则这群生物中肯定有同性恋。在他的实验中,单个个体以及和他们匹配的个体很容易认出,因为每个生物的背上都印上了数字。
给出每一对生物编号,判断这个实验能否支持教授的假设:这群生物中有同性恋或者没有。
输入:
第一行:几组实验
第二行:生物的个数<2000和几次交配x<1000000(用一个空格分开)
接下来的x行:每行是两个交配的生物的编号
输出:
如果教授一开始的假设是错的,那么输出“scenario”+ “#实验号”和结论-“Suspicious bugs found!”
Input:
2
3 3
1 2
2 3
1 3
4 2
1 2
3 4
输出:
Scenario #1:
Suspicious bugs found!
Scenario #2:
No suspicious bugs found!
#include<stdio.h>int f[2005],r[2005];int fs(int i){if(f[i]==i) return i;int t=f[i];f[i]=fs(f[i]); r[i]=(r[t]+r[i])%2; return f[i];}void un(int x,int y){int a=fs(x),b=fs(y);f[a]=b;r[a]=(r[y]-r[x]+1)%2; //r[a]+r[x]与r[y]相对于新的父节点必须相差1个等级,因为他们不是gay}int main(){int cases,n,m,i,k,x,y;scanf("%d",&cases);for(k=1;k<=cases;k++){ int flag=0; scanf("%d %d",&n,&m); for(i=1;i<=n;i++) { f[i]=i; r[i]=0; } for(i=1;i<=m;i++) { scanf("%d %d",&x,&y); if(fs(x)==fs(y)) { if(r[x]!=(r[y]+1)%2) flag=1; } else un(x,y); } if(flag) printf("Scenario #%d:\nSuspicious bugs found!\n\n",k); else printf("Scenario #%d:\nNo suspicious bugs found!\n\n",k);}return 0;}
0 0
- poj2492A Bug's Life
- poj2492A Bug's Life
- poj2492A Bug's Life(并查集详解)
- POJ2492A Bug's Life【并查集+根节点偏移】
- 并查集(种类并查集)POJ2492A Bug's Life解题报告
- A Bug's Life
- A Bug's Life
- poj2492_A Bug's Life
- A Bug's Life
- A Bug's Life
- A Bug's Life
- A Bug's Life
- A Bug's Life
- A bug‘s life
- A Bug's Life
- A Bug's Life
- A Bug's Life
- A Bug's LifeA Bug's Life
- CSS text-index| transform| decoration| text-overflow
- scipy用yum安装成功,python中却会import失败
- css中!important的作用
- SVN下的文件被锁定不能update和commit
- 工作6年第一记
- poj2492A Bug's Life
- Java 使用POI实现Excel表格的导入导出
- Java中重载的匹配规则
- Gson 解析
- Linux多网卡研究记录
- ubuntu 16.04 更新 gcc/g++ 4.9.2
- Moncler Herre face is evil to obtain
- 跳跃表原理
- javaWEB解决表单重复提交的问题(原理)