POJ 2492 (简单并查集) A Bug's Life
题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋。然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋
这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的时候要简单一些
sex数组保存的是与父节点的性别关系,如果与父节点是同性,则为0,否则是1
每次路径压缩的同时要更新sex[a] = (sex[a] + sex[temp]) % 2;
还有就是如果x 和 y 不在一个集合,两棵树进行合并的时候,考虑x px y py 四者之间的关系,有
parent[px] = py;
sex[px] = - (sex[x] ^ sex[y]);
这个在纸上模拟一下就很容易得出来
在敲代码的过程中还是犯了两个低级的小错误,因为一旦我们发现了存在同性恋,便可以输出结果了,不过要对剩余未读入的数据“忽略”
因为i可能是break出来的,这次循环没有完成,i也没有自增,所以在“忽略”的循环里面,i首先要自增一下
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
int parent[maxn], sex[maxn]; int GetParent(int a)
{
if(parent[a] == a) return a;
int temp = parent[a];
parent[a] = GetParent(parent[a]);
sex[a] = (sex[a] + sex[temp]) % ;
return parent[a];
} int main(void)
{
#ifdef LOCAL
freopen("2492in.txt", "r", stdin);
#endif int T, kase;
scanf("%d", &T);
for(kase = ; kase <= T; ++kase)
{
int n, m, i;
int x, y;
bool flag = false;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i)
{
parent[i] = i;
sex[i] = ;
}
for(i = ; i < m; ++i)
{
scanf("%d%d", &x, &y);
int px = GetParent(x);
int py = GetParent(y);
if(px == py)
{
if(sex[x] == sex[y])
{
flag = true;
break;
}
}
else
{
parent[px] = py;
sex[px] = - (sex[x] ^ sex[y]);
}
}
for(++i; i < m; ++i)
scanf("%d%d", &x, &y);
printf("Scenario #%d:\n%suspicious bugs found!\n\n", kase, flag ? "S" : "No s");
//if(kase < T) printf("\n");
}
return ;
}
代码君
POJ 2492 (简单并查集) A Bug's Life的更多相关文章
- POJ 2524 (简单并查集) Ubiquitous Religions
题意:有编号为1到n的学生,然后有m组调查,每组调查中有a和b,表示该两个学生有同样的宗教信仰,问最多有多少种不同的宗教信仰 简单并查集 //#define LOCAL #include <io ...
- poj 2492(关系并查集) 同性恋
题目;http://poj.org/problem?id=2492 卧槽很前卫的题意啊,感觉节操都碎了, t组测试数据,然后n,m,n条虫子,然后m行,每行两个数代表a和b有性行为(默认既然能这样就代 ...
- Poj(2236),简单并查集
题目链接:http://poj.org/problem?id=2236 思路很简单,傻逼的我输出写成了FALL,然后遍历的时候for循环写错了,还好很快我就Debug出来了. #include < ...
- POJ 2236 (简单并查集) Wireless Network
题意: 有n个电脑坏掉了,分别给出他们的坐标 有两种操作,可以O x表示修好第x台电脑,可以 S x y表示x y是否连通 两台电脑的距离不超过d便可连通,两台电脑是连通的可以直接连通也可以间接通过第 ...
- POJ - 2492 种类并查集
思路:保存每个点与其父节点的关系,注意合并和路径压缩即可. AC代码 #include <cstdio> #include <cmath> #include <cctyp ...
- poj 1611 简单并查集的应用
#include<stdio.h> #define N 31000 int pre[N]; int find(int x) { if(x!=pre[x]) pre[x]=find( ...
- poj1611 简单并查集
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 32781 Accepted: 15902 De ...
- 1213 How Many Tables(简单并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 简单并查集,统计单独成树的数量. 代码: #include <stdio.h> #i ...
- 【简单并查集】Farm Irrigation
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
随机推荐
- js生成唯一值的函数
利用了js的闭包性质 var uniqueNumber = (( function(){ var value = 0; return function(){ return ++value; }; }) ...
- chrome 网络面板
Chrome Timeline的指标说明:Blocked.Connect.Send.Wait.Receive Blocked time includes any pre-processing time ...
- jdom处理的XML Document 和String 之间的相互转化
package util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; ...
- 学习android的博客
http://www.cnblogs.com/hll2008/http://svn.apache.org/repos/asf/http://blog.csdn.net/chenzheng_javaht ...
- iOS开发工具Xcode:Interface Builder
简介: Interface Builder(IB)是Mac OS X平台下用于设计和测试用户界面(GUI)的应用程序(非开源).为了生成GUI,IB并不是必需的,实际上Mac OS X下所有的用户界面 ...
- java重构、重载、重写
重构:就是代码优化,或则你可以理解为代码的修改! 例:开始你的类名是A现在要改为B也称为重构的一种 重载:发生在同一类中,方法名相同,参数列表不同 重写:发生在父子类中,子类中有 ...
- 基于Mongodb的轻量级领域驱动框架(序)
混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...
- hibernate中openSession()跟getCurrentSession()方法之间的区别
Hibernate openSession() 和 getCurrentSession的区别 getHiberanteTemplate .getCurrentSession和OpenSession 采 ...
- QListWidget特别简单,但有两种添加item的方式
虽然特别简单,但是对于小白来说,还是有必要过一下脑子和眼睛,当然还得过手(江湖传言:眼过千变,不如手过一遍),所以记录在此: #include "tablewidgetxxx.h" ...
- JavaWeb笔记——ajax异步请求
1. ajax是什么? * asynchronous javascript and xml:异步的js和xml * 它能使用js访问服务器,而且是异步访问 * 服务器给客户端的响应一般是 ...