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

题目大意:输入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. [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast

    [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast 0x00 摘要 本文将通过源码分析和实例讲解,带领大家熟悉Flink的广播变量机制. 0x01 业务需求 1. 场景需求 对黑 ...

  2. OpenCV-Python 特征匹配 | 四十四

    目标 在本章中, 我们将看到如何将一个图像中的特征与其他图像进行匹配. 我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器 Brute-Force匹配器的基础 蛮力匹配器很简单. ...

  3. TensorFlow 神经机器教程-TensorFlow Neural Machine Translation Tutorial

    seq2seq 模型在广泛的任务比如机器翻译,语音识别,文本总结中取得了巨大的成功.这个教程给读者 seq2seq 模型一个完整的理解,并且展示如何从原型建立一个有竞争力的 seq2seq 模型.我们 ...

  4. GitHub标星2.6万!Python算法新手入门大全

    今天推荐一个Python学习的干货. 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万.这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各 ...

  5. Error response from daemon: rpc error: code = AlreadyExists desc = name conflicts with an existing object: service myweb already exists

    主机环境 centos7.2 执行 docker service create --replicas 6 --name myweb -p 80:80 nginx:latest 时 报 Error re ...

  6. 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

    目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系 ...

  7. iOS 真机查看沙盒目录

    iExplorer 的方法试的时候设备都无法检测到,建议放弃 启用iTunes文件共享,才能够看沙盒内的文件,只需要在plist文件中添加如下信息: <key>UIFileSharingE ...

  8. [vijos1844]遭遇战<SPFA>

    题目链接:https://vijos.org/p/1404 我在二分查找区找到这道题的,没错这就是一道摆在二分区但是可以用SPFA做的一道题(当然我后来去看了下分区,貌似这题的方法很多) 这一题还是比 ...

  9. Ubuntu 18 安装MySQL 5.7

    1.首先把系统换到阿里云的镜像源,需要等待一会 2.系统更新完毕后执行MySQL安装命令:sudo apt install mysql-server 3.查看MySQL服务状态:sudo servic ...

  10. 谈谈flex布局实现水平垂直居中

    我们在这要谈的是用flex布局来实现水平和垂直居中.随着移动互联网的发展,对于网页布局来说要求越来越高,而传统的布局方案对于实现特殊布局非常不方便,比如垂直居中.所以09年,W3C 提出了一种新的方案 ...