POJ 1703 Find them, Catch them(并查集高级应用)

手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/suncongbo/article/details/76735893

URL: http://poj.org/problem?id=1703

题目大意:本题即很经典的“龙帮虎帮”问题。
有n个元素(n<=1e5),分布在两个不同的集合里。
现在有M个语句(m<=1e5),每个语句共两种:(1) 给定某两个元素在不同的集合中。(2) 询问两个元素是否在同一集合中。对于是、否、无法确定的情况,分别输出"In the same gang.", "In different gangs.", "Not sure yet."
思路分析:假如给定的是两个元素在同一集合中,思路就很明确了。
但是现在给定的是两个元素不同集合,而且已知仅有两个集合,于是我们就可以想办法将其转化为两元素同集合问题。
设有元素A,B, 则我们将每个元素分别“克隆”为A', B', 但将她们放入分别与本身不同的另外一个集合中。
同时,保证A和A', B和B', ..., 永远不会同集合。
然后,假如已知A与B不同集合,则需将A和B', B和A'分别放入同一集合(union操作),假如已知A与B同集合,则需把A和B, A'和B'进行union一下即可。
最后,回答询问时,有以下三种情况:

(1) A与B同集合,或A'与B‘同集合:In the same gang.

(2) A与B'同集合,或B与A'同集合:In different gangs.

(3) 其他:Not sure yet.
代码呈现:(Time:532MS ,Memory:960K ,Code:1005B)

#include<cstdio>
using namespace std;const int MAXN = 1e5;
int fa[MAXN*2+2];
int n,m;int find_fa(int u)
{int i,j,k;i = u;while(fa[i] != i){i = fa[i];}fa[u] = i;j = u;while(j != i){k = fa[j];fa[j] = i;j = k;}return i;
}int main()
{int i,t,p,q,pp,qq,x,y;char ch[3];scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=1; i<=2*n; i++) //Union-Find Sets init{fa[i] = i;}for(i=1; i<=m; i++) //calculate while reading{scanf("%s%d%d",ch,&x,&y);if(ch[0] == 'A'){p = find_fa(x);q = find_fa(y);pp = find_fa(x+n);qq = find_fa(y+n);if(p == q) printf("In the same gang.\n");else if(pp == q || p == qq) printf("In different gangs.\n");else printf("Not sure yet.\n");}else if(ch[0] == 'D'){p = find_fa(x);q = find_fa(y);pp = find_fa(x+n);qq = find_fa(y+n);if(pp != q) fa[pp] = q;if(qq != p) fa[qq] = p;}}}return 0;
}

类似题目:poj 2492 A Bug's Life (几乎一模一样)
poj 1182 && luogu P2024 [NOI 2001]食物链 (一样的思路,元素分成三类)
luogu P1525 [NOIP 2010提高组] 关押罪犯 (个人认为难度较大)

发表于 2018-12-26 21:53 suncongbo 阅读(...) 评论(...) 编辑 收藏

刷新评论刷新页面返回顶部

POJ 1703 Find them, Catch them(并查集高级应用)相关推荐

  1. POJ 1703 Find them, Catch them 并查集

    题意:给你t组数据,每组数据给你编号为1-n的坏人,这些坏人要么属于团伙A,要么属于团伙B,然后给你m次操作: A操作:询问x和y是不是同一个团伙 D操作:告诉你x和y不是同一个团伙 思路:和POJ ...

  2. POJ 1703 Find them, Catch them(路径压缩并查集)

    POJ 1703 Find them, Catch them(路径压缩并查集) 2014年03月11日 20:13:54 阅读数:881 POJ 1703 Find them, Catch them( ...

  3. POJ 1417 True Liars(路径压缩并查集+DP背包问题)

    POJ 1417 True Liars(路径压缩并查集+DP背包问题) http://poj.org/problem?id=1417 题意: 给出p1+p2个人,其中p1个是好人,p2个是坏人.然后有 ...

  4. POJ 1703 Find them, Catch them 种类并查集

    题意 给出一堆点和关系 D为两点不同集合 A为查询两点是否不同集合 n<=1e5 code #include<cstdio> #include<iostream> #in ...

  5. POJ 1703 Find them, Catch them

    简单带权并查集0,1关系 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio& ...

  6. POJ1703 Find them, Catch them 并查集

    点击打开链接 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50757   Ac ...

  7. POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)

    题目链接:点击查看 题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同 题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两 ...

  8. POJ 3694 (tarjan缩点+LCA+并查集)

    好久没写过这么长的代码了,题解东哥讲了那么多,并查集优化还是很厉害的,赶快做做前几天碰到的相似的题. 1 #include <iostream> 2 #include <algori ...

  9. POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)

    [题意]一个无向图可以有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥(每次回答是在上一次连边的基础之上) [分析]好题,做完后涨了很多姿势~ 普通做法当然就是每加 ...

最新文章

  1. JS原型、原型链深入理解
  2. win7重装系统后设置Python2.7环境
  3. 软件工程之个人项目--词频统计
  4. ConTeXt 标题前后的空白
  5. 软件吞噬世界之前 SDS还要解决这些问题
  6. Ovum 最新市场报告称数据中心持续改变光网络市场
  7. hbase常用命令及操作
  8. ROS教程(一):Ubuntu ROS安装详细教程(全过程)+测试程序
  9. Windows下java后台运行以及停止
  10. 基于JavaMail的Java邮件发送:简单邮件发送
  11. 2022Java学习笔记十二(数组的遍历,数组遍历求和,数组排序,数组随机排名案例,数组猜数字游戏案例,数组求最大值案例,数据遍历求和案例)
  12. 外购计算机软件加速摊销的政策,固定资产或购入软件等可以加速折旧或摊销的优惠操作...
  13. numpy 函数里面的axis参数的含义
  14. c++小游戏合集(AI)
  15. 数组和链表的增删改查速度比较
  16. 基于人工智能的滚动轴承PHM方法综述
  17. 阿里云-设置远程桌面连接
  18. 移动互联网时代电商如何突围?
  19. 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)?
  20. 女人身体8大隐私部位长得越丑健康指数越高_113

热门文章

  1. Windows下更改pip镜像源
  2. python类的方法三种访问权_Python基础33-面向对象(继承资源(属性与方法)的使用注意)...
  3. OpenGL编程指南14:混合半透明Blend
  4. Linux下修改命令提示符
  5. 转移地址在内存中的jmp指令 检测点9.1
  6. 字符串和整形、浮点类型的相互转化
  7. 关于Spring 声明式事务处理时,throws exception不回滚的问题
  8. JPA时间注解(转)
  9. 常用日志门面和日志实现
  10. JVM_05 执行引擎(Execution Engine)