这个题目的写法有很多,用二分图染色也可以写,思路很好想,这里我们用关于并查集的两种写法来做。

题目大意:输入x,y表示x和y交配,然后判断是否有同性恋。

1 带权并查集:

  我们可以用边的权值来表示一种关系,比如说

我们可以设权值为1,假如A和B发生关系,B和C发生关系,那么C到A的距离就是2,如果A和C发生关系,那就会产生矛盾,因此A和C是同性。

所以如果x和y可以发生关系,首先x和y必须在一棵树上,并且x和y到跟的距离必须同为奇数或者同为偶数。

code:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=+;
int fa[N],w[N];
int find(int x){
if(x==fa[x]) return x;
else {
int c=find(fa[x]);
w[fa[x]]%=;
w[x]=(w[x]+w[fa[x]])%;
return fa[x]=c;
}
}
bool unite(int x,int y){
int fx=find(x),fy=find(y);
if(fx!=fy){
fa[fx]=fy;
w[fx]=(w[y]-w[x]+)%;
return ;
}
else {
return w[x]%==w[y]%;
}
}
void solve(int time){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
fa[i]=i;
w[i]=;
}
int ans=;
for(int i=;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(ans) continue ;
if(unite(x,y)){
ans++;
// break;//注意这里不能直接break...wa了好几发,但是CF是可以的。。。
}
}
printf("Scenario #%d:\n",time);
if(ans) puts("Suspicious bugs found!\n");
else puts("No suspicious bugs found!\n");
}
int main(){
int t;cin>>t;
for(int i=;i<=t;i++) solve(i);
return ;
}

2 种类并查集:

  如果用种类并查集来写,那这个题就相当于 食物链 那道题目的缩水版。。。

  将每个元素分为两类,x和x+n,如果x和y可以发生关系,那么x和y不能是同类,也就是说x和y不能是一类,x+n和y+n不能是一类。

  code:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=+;
int fa[N+N];
int find(int x){
return fa[x]==x? x:fa[x]=find(fa[x]);
}
int unite(int x,int y){
int fx=find(x),fy=find(y);
fa[fx]=fy;
}
bool same(int x,int y){
return find(x)==find(y);
}
void solve(int time){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n+n;i++) fa[i]=i;
int ans=;
for(int i=;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
x--;y--;
if(ans) continue ;
if(same(x,y)||same(x+n,y+n)){
ans=;
// if(ans) break;//注意这里不能直接break...wa了好几发,但是CF是可以的。。。
}
else {
unite(x,y+n);unite(y,x+n);
}
}
printf("Scenario #%d:\n",time);
if(ans) puts("Suspicious bugs found!\n");
else puts("No suspicious bugs found!\n");
}
int main(){
int t;cin>>t;
for(int i=;i<=t;i++) solve(i);
return ;
}

A Bug's Life POJ - 2492 (种类或带权并查集)的更多相关文章

  1. POJ 1182 食物链 【带权并查集】

    <题目链接> 题目大意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我 ...

  2. POJ 1182 食物链 (带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78551   Accepted: 23406 Description ...

  3. POJ 1182 食物链 【带权并查集/补集法】

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  4. POJ 1182 食物链(带权并查集)

    传送门 食物链  Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65579   Accepted: 19336 Descri ...

  5. POJ 1984 - Navigation Nightmare - [带权并查集]

    题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...

  6. POJ 1417 - True Liars - [带权并查集+DP]

    题目链接:http://poj.org/problem?id=1417 Time Limit: 1000MS Memory Limit: 10000K Description After having ...

  7. POJ 3228 Gold Transportation(带权并查集,好题)

    参考链接:http://www.cnblogs.com/jiaohuang/archive/2010/11/13/1876418.html 题意:地图上某些点有金子,有些点有房子,还有一些带权路径,问 ...

  8. POJ 1988 Cube Stacking(带权并查集)

    哈哈,一次AC. 题意:给你 1-n 编号的立方体,然后移动包含指定编号的立方体的堆移到另一个堆上边, 询问指定的编号立方体下面有多少个立方体. 思路:由于并查集是存储的是它的父亲,那么只能从父亲那里 ...

  9. POJ 1773 Parity game 带权并查集

    分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...

随机推荐

  1. 深入Redis命令的执行过程

    深入Redis命令的执行过程 Redis 服务器: Redis 服务器实现与多个客户端的连接,并处理这些客户端发送过来的请求,同时保存客户端执行命令所产生的数据到数据库中.Redis 服务器依靠资源管 ...

  2. [最短路,floyd] Codeforces 1204C Anna, Svyatoslav and Maps

    题目:http://codeforces.com/contest/1204/problem/C C. Anna, Svyatoslav and Maps time limit per test 2 s ...

  3. elasticsearch实战(1)-单机快速部署

    1. 场景描述 elasticsearch只用过,没有部署或者维护过,从头完整走一遍,记录下,原创实战,有需要的朋友参考下. 2 . 解决方案 特别说下,以前win7下安装的3台虚拟机,没有联网,因为 ...

  4. 图像配准:从SIFT到深度学习

      图像配准(Image Registration)是计算机视觉中的基本步骤.在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法. 什么是图像配准 图像配准就是找到一幅图像像素到另一 ...

  5. 新手必备 | 史上最全的PyTorch学习资源汇总

    目录: PyTorch学习教程.手册 PyTorch视频教程 PyTorch项目资源      - NLP&PyTorch实战      - CV&PyTorch实战 PyTorch论 ...

  6. 工作日志,Excel导入树结构数据

    目录 1. 前言 2. 需求分析 2.1 需求难点 2.2 解决难点 2.3 表格设计 3. 功能实现 3.1 一个分枝 3.2 一个分枝多个树叶 3.3 多个分枝多个树叶 4. 代码事例 4.1 目 ...

  7. Windows程序卡顿、无响应问题定位

    当windows程序出现异常.界面卡顿.无响应情况时,在有工程和源码的情况下,程序员通常是打开IDE,在DEBUG模式下进行调试.但如果是一个RELEASE程序,且无调试环境,该如何来定位呢. 这里介 ...

  8. Python学习-第三节part1: 关于函数

    一 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护 ...

  9. Spring钩子接口Aware

    前言 我们在编写代码的时候,有的时候想要使用Spring的底层组件,类似于 ApplicationContext, BeanFactory等等 那我们实现Spring提供的钩子方法xxxAware.在 ...

  10. 使用onclick/表单submit跳转到其他页面

    使用onclick 如果是本页显示可以直接用location,方法如下: - onclick="javascript:window.location.href='URL'" - o ...