并查集的使用,臭虫同性恋问题
并查集臭虫同性恋经典问题
这个问题也可以理解为:敌人的敌人是朋友问题,这个题总的来说就是进行两个并查集的增添问题,敌人的敌人是朋友,类似,如果出现了敌人的敌人是敌人的情况,那么就输出这种情况就可以了。
例题 :poj-2492 -A Bug’s Life
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int ls[20010];
int f[20010];//记录臭虫对象的数组
int fid(int x)
{return x == f[x] ?x:fid(f[x]);
}
void bc(int x,int y)
{int xx = fid(x);int yy = fid(y);if(xx!=yy)f[xx] = yy;
}
int main()
{int t;scanf("%d",&t);int ki = 1;while(t--){int n, m;scanf("%d%d",&n,&m);memset(ls,0,sizeof(ls));for(int i = 0; i <= n; i ++)f[i] = i;int flag = 0;for(int i = 1; i <= m; i++){int a, b;scanf("%d%d",&a,&b);if(!ls[a]&&!ls[b])//如果两个臭虫原来都还没有对象,那么他们两个互为异性{ls[a] = b;ls[b] = a;}else if(!ls[a]&&ls[b])//如果其中一个有对象,那么这个新的对象和原来那个是同性的,需要进行并查集的合并{ls[a] = b;bc(a,ls[b]);}else if(ls[a]&&!ls[b])//类似于上一个else if的说明{ls[b] = a;bc(b,ls[a]);}else//都原来有过对象,进行性别的合并{bc(ls[a],b);bc(ls[b],a);}if(fid(a) == fid(b))//如果发现两者的祖先相同,即表示是同一个性别,那么就有同性恋出现,这时候疏忽答案即可flag = 1;}printf("Scenario #%d:\n",ki++);if(flag){printf("Suspicious bugs found!\n");}else{printf("No suspicious bugs found!\n");}printf("\n");}return 0;
}
并查集的使用,臭虫同性恋问题相关推荐
- POJ 2492 A Bug's Life 带权并查集
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...
- 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)
题干: Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36176 Accep ...
- HDU1829【种类并查集】
题意: 检验给出条件是否有同性恋. 思路: 条件并查集. 还是一个类似的前缀和,sum[x]是x到根这段路径上的和,根一定是坐标越小的, 那么如果说对于同类(同一个集合)的判断就sum[a]是否等于s ...
- [kuangbin带你飞]专题五 并查集 题解+总结
kuangbin带你飞:点击进入新世界 总结: 本人算是初学者中的初学者,欢迎交流~ 并查集的接触过的不多,大概只有普通并查集,带权并查集,种族并查集,传说中的可持续化并查集只是听说过还没有接触,不过 ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
最新文章
- 英国更注重人工智能基础性研究
- ine.strip().split()
- 从技术角度谈一谈,我参与设计开发的手Q春节红包项目--转
- express添加权限拦截
- Asp.NET Core一个接口的多个实现如何基于当前HTTP请求注册
- centos6.5装mysql好难_CentOS6.5 下MySQL傻瓜式安装
- Quartz教程:快速入门
- 用计算机充手机吗,电脑充电器可以充手机吗
- 促销海报设计模板,可临摹学习!
- Linux下的iscsi(设备的共享服务)
- 第十次课:Python函数(一)
- php处理ubb代码,UBB代码详解
- 电影票预售系统1.0
- VB串口通信技术资料:媒体/源码/论文/书籍/视频/控件/程序
- Linux系统自动更新时间命令的详细说明
- 如何快速高效的进入新的知识领域
- GO实现 回文质数 (Prime Palindromes)
- MacPorts 初装后提示 command not found: port 解决方案
- python中单引号,双引号,三引号的区别
- Gaia蓝牙音箱android开发,Windows7系统配置蓝牙模块GAIA功能的方法