POJ 2492 A Bug's Life
来源:互联网 发布:linux find mtime 1 编辑:程序博客网 时间:2024/05/21 07:01
并查集操作,用一个oid数组来存放虫子的对立面
如果两只虫子a,b的祖先相同那就是同性恋了.
每次合并a,b把a和b的对立面合并,把b和a的对立面合并
#include <iostream>#include <cstdio>using namespace std;const int maxn=2010;int id[maxn],oid[maxn],size[maxn],n,m;void clear(){for (int i=1;i<=n;++i){id[i]=i;oid[i]=0;size[i]=1;}}int find(int p){return p==id[p]?p:id[p]=find(id[p]);}void uni(int p,int q){int pp=find(p),pq=find(q);if(pp==pq)return;if(size[pp]>size[pq]){id[pq]=pp;size[pp]+=size[pq];}else{id[pp]=pq;size[pq]+=size[pp];}}int main(){int t,cas=1;scanf("%d",&t);while (t--){scanf("%d%d",&n,&m);printf("Scenario #%d:\n",cas++);clear();bool f=0;while (m--){int p,q,pp,pq;scanf("%d%d",&p,&q);if(f)continue;pp=find(p),pq=find(q);if(pp==pq){//祖先相同,有同性恋....f=1;continue;}else{if(oid[p]==0){oid[p]=pq;}if(oid[q]==0){oid[q]=pp;}uni(p,oid[pq]);//和对方的对立面合并uni(q,oid[pp]);}}if(!f){printf("No suspicious bugs found!\n\n");}else{printf("Suspicious bugs found!\n\n");}}return 0;}
- 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
- 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
- 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
- c++设计模式:单件模式(Singleton Pattern)
- [Android]关于target=android-n
- mkdir: cannot create directory `104nfstest': Read-only file system
- experiment : ip convert to DWORD value on nt driver
- 寻找更好的人生道路-----IT人
- POJ 2492 A Bug's Life
- 比较R语言、perl语言,matlab中for循环和while循环的使用
- jQuery对象数据缓存Cache原理及jQuery.data详解
- 石头-剪刀-布, 这个经典游戏的基本逻辑是这样的吗????
- 编程之美2013 传话游戏 跪求debug
- 关于函数调用约定
- Opengl--执行过程
- 请教一个关于编码的问题
- 关于metapost的开始dotlabel输出ps文件无法读出来问题