并查集臭虫同性恋经典问题

这个问题也可以理解为:敌人的敌人是朋友问题,这个题总的来说就是进行两个并查集的增添问题,敌人的敌人是朋友,类似,如果出现了敌人的敌人是敌人的情况,那么就输出这种情况就可以了。

例题 :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;
}

并查集的使用,臭虫同性恋问题相关推荐

  1. POJ 2492 A Bug's Life 带权并查集

    题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...

  2. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)

    题干: Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accep ...

  3. HDU1829【种类并查集】

    题意: 检验给出条件是否有同性恋. 思路: 条件并查集. 还是一个类似的前缀和,sum[x]是x到根这段路径上的和,根一定是坐标越小的, 那么如果说对于同类(同一个集合)的判断就sum[a]是否等于s ...

  4. [kuangbin带你飞]专题五 并查集 题解+总结

    kuangbin带你飞:点击进入新世界 总结: 本人算是初学者中的初学者,欢迎交流~ 并查集的接触过的不多,大概只有普通并查集,带权并查集,种族并查集,传说中的可持续化并查集只是听说过还没有接触,不过 ...

  5. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  6. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  7. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  8. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  9. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

最新文章

  1. 英国更注重人工智能基础性研究
  2. ine.strip().split()
  3. 从技术角度谈一谈,我参与设计开发的手Q春节红包项目--转
  4. express添加权限拦截
  5. Asp.NET Core一个接口的多个实现如何基于当前HTTP请求注册
  6. centos6.5装mysql好难_CentOS6.5 下MySQL傻瓜式安装
  7. Quartz教程:快速入门
  8. 用计算机充手机吗,电脑充电器可以充手机吗
  9. 促销海报设计模板,可临摹学习!
  10. Linux下的iscsi(设备的共享服务)
  11. 第十次课:Python函数(一)
  12. php处理ubb代码,UBB代码详解
  13. 电影票预售系统1.0
  14. VB串口通信技术资料:媒体/源码/论文/书籍/视频/控件/程序
  15. Linux系统自动更新时间命令的详细说明
  16. 如何快速高效的进入新的知识领域
  17. GO实现 回文质数 (Prime Palindromes)
  18. MacPorts 初装后提示 command not found: port 解决方案
  19. python中单引号,双引号,三引号的区别
  20. Gaia蓝牙音箱android开发,Windows7系统配置蓝牙模块GAIA功能的方法

热门文章

  1. Web Service漏洞挖掘
  2. SQL学习-2.7 SQL聚合
  3. FP-Tree的Python实现
  4. 2022.12六级真题第3套(共6页)
  5. 把宇宙138亿年压缩到1年
  6. 给文本文件每一行加行号
  7. 玩转VIM编辑器-导航移动
  8. php中define是啥意思
  9. DF-700滤桶 四个角扣具漏水问题
  10. 免费linux远程服务器主机nitrousIO