poj 1988(并查集)
题意:进行m次操作,M x y 将包含x的集合移动到y上面,C x, 计算x下面有几个元素。
解题思路:这道题很容易想到用并查集,但是这里有点绕;最开始我想到的是建立一个num[x],表示x以下的节点数,但这样会有一个问题,要更新num[x]时,必须要枚举哪些节点的父节点为p,由于节点数太多,所以TLE是难免的。。。。
这里有一个好办法:在算x以下节点数时,可以用x所在集合元素的个数 - 在它之上的个数 - 它本身。这样就可以避免枚举了。
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 30005;
int fa[maxn],cnt[maxn],top[maxn];int find(int x)
{if(fa[x] == x) return x;int t = fa[x];fa[x] = find(fa[x]);top[x] += top[t];return fa[x];
}void Union(int x,int y)
{int fx = find(x);int fy = find(y);if(fx != fy){fa[fy] = fx;top[fy] = cnt[fx];cnt[fx] += cnt[fy];}
}int main()
{int p,a,b;char ch;for(int i = 1; i < maxn; i++){fa[i] = i;top[i] = 0;cnt[i] = 1;}scanf("%d",&p);while(p--){getchar();ch = getchar();if(ch == 'M'){scanf("%d%d",&a,&b);Union(a,b);}else {scanf("%d",&a);int f = find(a);printf("%d\n",cnt[f] - top[a] - 1);}}return 0;
}
poj 1988(并查集)相关推荐
- poj 3310(并查集判环,图的连通性,树上最长直径路径标记)
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...
- poj 2985(并查集+线段树求K大数)
解题思路:这道题并查集很容易,合并时找到父节点就直接加上去就ok了.关键是如何求K大数,我一直在想用线段树怎么写,一开始想如果直接记录数的大小那肯定是没戏了,借鉴了一下别人的思路:区间[a,b]记录的 ...
- POJ 2492 并查集,带权或带偏移量并查集 【例题详解】
分析这道题,我们可以得出,假如a,b,c三只虫子,a和b可以交配,b和c也可以交配,那么a和c一定是同行,因为他们和同一个异性交配了.所以我们可以把关系抽象成图,在ab之间,bc之间各连一条线长度为1 ...
- poj 1703 并查集
题意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 链接: ...
- POJ 并查集 题目汇总 ——czyuan原创(转)
继续数据结构的复习,本次的专题是:并查集. 并查集,顾名思义,干的就是"并"和"查"两件事.很多与集合相关的操作都可以用并查集高效的解决. 两个操作代码: ...
- 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
http://poj.org/problem?id=1308 这个题数组开到200就可以了,但题目中貌似没有说呢? 读入每一对顶点,看看他们是否在同一个集合中,如果是的话,肯定成环,不是一棵树. 用s ...
- 【割边缩点】解题报告:POJ - 3694 - Network(Tarjan割边缩点 + LCA + 并查集优化)
POJ - 3694 - Network 给定一张N个点M条边的无向连通图,然后执行Q次操作,每次向图中添加一条边,并且询问当前无向图中"桥"的数量.N≤105,M≤2∗105,Q ...
- Poj(1703),种类并查集
题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...
- POJ 2236 Wireless Network 并查集
Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS Memory Limit:6553 ...
最新文章
- lamda表达式python_Python--13 lambda表达式
- OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
- qq传java文件_java学习:基于TCP的网络文件传输(可改写的QQ文件传输)
- 多特征值数据预处理_「人工智能」No.6 特征工程之数据预处理
- dubboSPI机制浅谈
- No.1 字符编码数据类型
- eclipsevue代码怎么运行_打了多年的单片机调试断点到底应该怎么设置? | 颠覆认知...
- zabbix详解(二)——zabbix工作原理
- java jsonarray string_String JSONObject JSONArray 转换
- 提醒后来人:钉钉里面的钉盘一定不要用,坑
- 51单片机课设--篮球计分器
- A - Chloe and the sequence
- 海马玩模拟器连接AndroidStudio
- 淘宝/天猫获取淘宝直播分类id接口 API 返回值说明
- 聊聊办公室装修适合哪些风格以及装修技巧
- 【看表情包学Linux】环境安装 | 安装XShell | 基本的账号管理
- 微信小程序开发之——拍照上传
- 《发现你的心灵》——于丹
- Mac OS X: 再续〉安全警告,病毒就在你身边
- 2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式