POJ 2492 A Bug's Life
来源:互联网 发布:java 当前时间加1小时 编辑:程序博客网 时间:2024/05/22 09:49
题目:点击打开链接
题目大意:
有很多虫子,给出交配的关系,问是否存在同性恋的情况。
思路:
用并查集存储虫子之间的关系,f代表与每个虫子相关的那个虫子,k表示性别。每一次输入新的关系时,如果这两个虫子本就在一棵树上且它们的性别相同,就说明有同性恋的情况;否则,就合并这两棵树。
第一次提交时RE,原因是合并时性别的关系处理不当。比如a、b虫子在自己的树上均为雄性,但是因为这是两颗不同的树,树与树之间并无关联,所以是可以合并的。合并的时候要将所有的性别规则都改得一致,就是将两个树中的其中一颗的性别全部颠倒。因为find函数无法遍历这棵树上的所有节点,所以这一功能不能在find函数中实现,要单独写。
第二次提交时格式错误,又忘了每组数据后的那个空行了。
代码:
#include <cstdio>#include <iostream>#include <string.h>using namespace std;int f[2002]= {0};bool k[2002]= {0};int find(int x){if(f[x]==x){return x;}int y=find(f[x]);f[x]=y;return f[x];}int main() {int t;scanf("%d",&t);int xx=0;while(t--) {xx++;printf("Scenario #%d:\n",xx);int n,m;scanf("%d%d",&n,&m);memset(f,0,sizeof(f));bool flag=false;for(int i=1;i<=n;i++){f[i]=i;}for(int i=1; i<=m; i++) {int x,y;scanf("%d%d",&x,&y);if(flag==false) {int rootx=find(x),rooty=find(y);if(rootx==rooty&&k[x]==k[y]) {flag=true;} else {if(k[x]!=k[y]){for(int i=1;i<=n;i++){if(f[i]==rootx){f[i]=rooty;}}}else{for(int i=1;i<=n;i++){if(f[i]==rootx){k[i]=(k[i]==false);f[i]=rooty;}}}}}}if(flag==true){printf("Suspicious bugs found!\n\n");}else{printf("No suspicious bugs found!\n\n");}}return 0;}
1 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
- STM32寄存器开发系列(1)启动代码设计
- (1)spring boot起步之Hello World【从零开始学Spring Boot】
- Dijkstra算法--一个点到其余点最短路径
- 网络编程TCP/UDP
- Thinkpad T400安装CentOS 7后无wifi的解决方法
- POJ 2492 A Bug's Life
- notepad++设置网络代理
- Rime协议学习笔记:(四)标识广播broadcast
- c++随机数
- Ubuntu14.04下kpatch源码安装使用
- 【HDU 1498 50 years, 50 colors】+ 二分图
- Android核心基础_广播_服务
- 针对有头结点的链表进行排序
- javaweb工程出现错误及解决