洛谷 P3367 ---- 【模板】并查集
题目描述
给出一个并查集,请完成合并和查询操作。
输入格式:
第一行包含两个整数N、M,表示共有N个元素和M个操作。
接下来M行,每行包含三个整数Zi、Xi、Yi
当Zi=1时,将Xi与Yi所在的集合合并
当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N
输出格式:
如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N
输入样例
4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4
输出样例
N
Y
N
Y
数据规模
对于30%的数据,N<=10,M<=20;
对于70%的数据,N<=100,M<=1000;
对于100%的数据,N<=10000,M<=200000。
时空限制:1000ms, 128M
注:PAT上有同样的题目,但是时空限制为400 ms, 64 MB
// 这个题目400ms的要求稍有严苛了,最后一个测试点时过时不过,不知道是否有更好的方法进行优化#include <iostream>
using namespace std;
int f[10005];
int n, m;// // 递归find根节点
// int find(int v)
// {
// return f[v] == v ? v : f[v] = find(f[v]);
// }// 非递归find根节点
int find(int x)
{int r = x;while (r != f[r])r = f[r];int i = x, j;while (i != r){j = f[i];f[i] = r;i = j;}return r;
}int main()
{// 清除cin效率问题ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;// init functionfor (int i = 1; i <= n; i++){f[i] = i;}while (m--){int x, y, z;cin >> x >> y >> z;if (x == 1){// merge functionf[find(y)] = find(z);}else{cout << (find(y) == find(z) ? "Y" : "N") << endl;}}system("pause");return 0;
}
洛谷 P3367 ---- 【模板】并查集相关推荐
- 洛谷P4092树——并查集
题目:https://www.luogu.org/problemnew/show/P4092 利用并查集,倒序离线,那么从倒序来看被撤销标记的点就再也不会被标记,所以用并查集跳过: 莫名其妙的WA,调 ...
- 洛谷[P1396]营救 并查集
题目地址http://www.luogu.org/problem/show?pid=1396 P1396拯救膜法师(欸??) 题目描述 "咚咚咚--""查水表!" ...
- 4.11每日一题之亲戚(洛谷c++)|简单并查集
- 并查集模板——并查集(洛谷 P3367)
题目选自洛谷P3367 是并查集的最入门的题目,也是并查集的模板题~~ 如果你还不知道并查集是什么? 请看我的这篇文章 点击链接 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 ...
- 洛谷 P3367 【模板】并查集
嗯... 题目链接:https://www.luogu.org/problemnew/show/P3367 并查集可以支持的操作:"并"和"查".然后这道题主要 ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- ACM模板——并查集
#define _for(i,a,b) for(int i = (a);i < (b);i ++) const int maxn = 50003; int par[maxn]; //父亲 int ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
最新文章
- JavaScript获取当前日期,昨天,今天日期以及任意天数间隔日期
- [转]SVN + CruiseControl.NET + NANT 自动编译提交的项目最小DEMO
- 串行异步通信_单片机串行口介绍
- [pytorch、学习] - 5.3 多输入通道和多输出通道
- c语言记录五个数组编程,C语言经典编程之数组
- Python爬虫入门七正则表达式
- 传说中的马尔科夫链到底是个什么鬼?
- Resharper快捷键及用法
- 为什么我离开了管理岗位
- Gpower软件真不错
- Struts2到底为我们做了什么
- 使用卡尔曼滤波器进行回声消除
- 转:getParameter、getParameterValues、getParameterMap用法详解
- SpringCloud系列——Eureka中Region和Zone概念介绍
- [转]scite文本编辑器的说明
- 职场必备:Excel2016,官方推荐使用技巧
- 瘟神的尾行 -- Rootkit技术发展史 (转载)
- JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷
- MySQL数据库之设置密码修改密码用户名
- 非线性激励函数sigmoid,tanh,softplus,Relu
热门文章
- linux自动挂载usb打印机,Linux下使用Usbmount实现USB设备自动挂载
- mysql dnslog_dnslog小技巧
- ldap协议 java_java如何调用ldap协议【LdapContext】
- sha-1算法的实现 c语言,SHA-1算法的C语言实现
- attrib批量显示文件夹_1.2Windows之DOS命令基础篇-学习attrib+del+copy+xcopy命令
- pycharm项目目录结构_「Actix-web项目」-项目整体目录结构
- cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
- Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动
- Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解
- Java 分割字符串