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提高组] 关押罪犯 (个人认为难度较大)
POJ 1703 Find them, Catch them(并查集高级应用)的更多相关文章
- POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集
POJ 2236 Wireless Network http://poj.org/problem?id=2236 题目大意: 给你N台损坏的电脑坐标,这些电脑只能与不超过距离d的电脑通信,但如果x和y ...
- poj.1703.Find them, Catch them(并查集)
Find them, Catch them Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I6 ...
- POJ 1703 Find them, catch them (并查集)
题目:Find them,Catch them 刚开始以为是最基本的并查集,无限超时. 这个特殊之处,就是可能有多个集合. 比如输入D 1 2 D 3 4 D 5 6...这就至少有3个集合了.并且 ...
- POJ 1703 Find them, Catch them 并查集的应用
题意:城市中有两个帮派,输入中有情报和询问.情报会告知哪两个人是对立帮派中的人.询问会问具体某两个人的关系. 思路:并查集的应用.首先,将每一个情报中的两人加入并查集,在询问时先判断一下两人是否在一个 ...
- POJ 1703 Find them, Catch them 并查集,还是有点不理解
题目不难理解,A判断2人是否属于同一帮派,D确认两人属于不同帮派.于是需要一个数组r[]来判断父亲节点和子节点的关系.具体思路可参考http://blog.csdn.net/freezhanacmor ...
- [并查集] POJ 1703 Find them, Catch them
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43132 Accepted: ...
- POJ 1703 Find them, Catch them(种类并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41463 Accepted: ...
- hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them
http://acm.hdu.edu.cn/showproblem.php?pid=1829 http://poj.org/problem?id=2492 臭虫有两种性别,并且只有异性相吸,给定n条臭 ...
- POJ 1703 Find them, Catch them (数据结构-并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31102 Accepted: ...
随机推荐
- pcm数据生成wav文件
Qt由pcm数据生成wav文件 void AudioGrabber::saveWave(const QString &fileName, const QByteArray &raw, ...
- ios单元測试之GHUnit
1.相同创建一个測试的project, 2.通过cocoaPod来下载GHUnit框架,或者到github上下载.由于这个框架是开源的第三方框架. 同一时候加入QuartCore.framework( ...
- WPF中控件TextBlock使用(简单)
TextBlock主要用来显示文字.比方: <TextBlock Name="txtBlockOutpuMessage" Text="hello" / ...
- POJ 3579 Median (二分)
...
- B5248 [2018多省省队联测]一双木棋 状压dp
这个题当时划水,得了二十分,现在来整一整. 这个题用状压来压缩边界线,然后通过记忆化搜索进行dp.我们可以观察到,其实每次转移,就是把一个1向左移一位.最后的状态设为0. 这其中还要有一个变量来记录谁 ...
- Linux下查看操作系统的位数和系统名称版本信息
Linux下如何明确地查看操作系统的位数 如何知晓操作系统是32位还是64位?这里介绍一种简单的方式: [plain] [root@localhost mysql-5.1.57]# getconf L ...
- 【K8s】Kubernetes架构理解
抽空学习了一下Kubernetes,感觉和大数据领域内集群的资源管理.任务调度等有异曲同工之处,简单总结一下备忘. [概念] Kubernetes是一个工业级的容器编排平台,单词有点长,常用K8s代称 ...
- go的基础数据类型
一.基础数据类型 在go语言中,数据类型用于申明函数和变量 go语言的类型 数据类型 描述 布尔型 布尔型值的只能是true 和 false ,例如 var b bool = true, 布尔型值声明 ...
- 爬虫框架Scrapy与Web框架Django结合
在做两者结合之前,需要先准备一个可以独立运行的Scrapy框架和一个可以独立运行的Django框架! 当准备好这两个框架之后,就可以做两者的结合了. 一. 把scrapy框架,移动到Django框架的 ...
- CodeForces A. Meeting of Old Friends
2019-05-30 20:19:57 加油!!! sort(a + 1, a + 5); 卡了一会儿 #include <bits/stdc++.h> using namespace s ...