【并查集】POJ 2492 A Bug's Life
2017-04-24 09:24
399 查看
Description
BackgroundProfessor 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
23 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.带向量偏移的并查集,在更新父亲的同时,也要更新节点与根节点的关系,通过关系来反映飞虫的性别:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=5000+10; int fa[MAXN]; int re[MAXN]; bool flag; void read(int &x) { x=0; char c=getchar(); while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } } int found(int x) { if(fa[x]!=x) { int k=fa[x]; fa[x]=found(k); re[x]=(re[x]+re[k])%2; } return fa[x]; } void link(int x,int y) { int a=found(x),b=found(y); fa[a]=b; re[a]=(re[x]-re[y]+1)%2; } int main() { int t,s=1; read(t); while(s<=t) { flag=true; int n,m; read(n);read(m); memset(re,0,sizeof(re)); for(int i=0;i<MAXN;i++)fa[i]=i; for(int i=1;i<=m;i++) { int x,y; read(x);read(y); int r1=found(x),r2=found(y); if(r1!=r2)link(x,y); else { if(re[x]!=(re[y]+1)%2)flag=false; } } if(flag)printf("Scenario #%d:\nNo suspicious bugs found!\n\n",s++); else printf("Scenario #%d:\nSuspicious bugs found!\n\n",s++); } return 0; }
相关文章推荐
- POJ-2492 A Bug's Life 并查集
- [NWPU][2014][TRN][12]并查集D - A Bug's Life POJ 2492
- A Bug's Life 【POJ--2492】【带权的并查集】
- POJ 2492 A Bug's Life 并查集维护类别
- 【并查集】POJ_2492_A Bug's Life
- poj 2492 A BUG'S LIFE 不是纯裸的并查集
- A Bug's Life POJ - 2492(种类并查集)
- POJ - 2492 Bug's Life(种族并查集的简单应用)
- [POJ 2492]A Bug's Life[并查集]
- poj 2492 A Bug's Life 【并查集拓展】
- POJ 2492 A Bug's Life 并查集的应用
- 【种类并查集】-POJ-2492-A bug's life
- POJ 2492--A Bug's Life 【并查集,向量偏移】
- POJ 2492 A Bug's Life 并查集
- [并查集]HDU 1829/POJ 2492/HOJ 2319 A Bug's Life
- POJ 2492 A Bug's Life
- poj A Bug's Life(关系并查集)
- POJ 2492 A Bug's Life (并查集)
- poj 2492 - A Bug's Life(并查集)
- POJ-2492-A Bug's Life [并查集]