并查集——银河英雄传说
银河英雄传说
解:对M操作,用并查集维护即可。对于C操作,在合并结点的时候还需要维护s和d两个数组,s表示当前集合的大小,保存在根结点上,d表示当前元素到根结点的距离,保存在各个元素上。在合并结点的同时更新s与d数组,运用前缀和的思想,即可O(1)回答各个询问。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i = a;i<n;i++)
#define per(i,a,n) for(int i = n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define yes cout<<"YES"<<'\n';
#define no cout<<"NO"<<'\n';
#define endl '\n';
typedef vector<int> VI;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}());
const ll MOD=1000000007;
int rnd(int x) {return mrand() % x;}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;};
ll lcm(int a,int b){return a*b/gcd(a,b);};const int N=30010;
int n;
int p[N],s[N],d[N];int findd(int x){if(p[x]!=x){int root=findd(p[x]);d[x]+=d[p[x]];p[x]=root;}return p[x];
}int main(){ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;rep(i,0,N) p[i]=i,s[i]=1;rep(i,0,n){char op;int a,b;cin>>op>>a>>b;if(op=='M'){int pa=findd(a),pb=findd(b);if(pa!=pb){d[pa]=s[pb];s[pb]+=s[pa];p[pa]=pb;}}else{int pa=findd(a),pb=findd(b);if(pa!=pb){cout<<-1<<endl;}else cout<<max(0,abs(d[a]-d[b])-1)<<endl;}}return 0;
}
并查集——银河英雄传说相关推荐
- 并查集——银河英雄传说()
传送门:238. 银河英雄传说 - AcWing题库 思路: 使用并查集可以传递关系的性质,维护一个cnt[i]数组,该数组用于记录以i为跟并查集树下的战舰的数量,用一个d[i]数组表示在i前面的战舰 ...
- 蓝桥备赛第四周 同余+并查集
文章目录 0x33 同余 同余类+剩余系+费马小定理+欧拉定理及推论 最幸运的数字 题解 这次的代码很多东西:欧拉函数快速求解,gcd,快速乘,各种定理,建议当模板背 10LL 转换成长整型 快速乘+ ...
- 【并查集】银河英雄传说 (luogu 1196/ssl 1225)
银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...
- 并查集专题(亲戚,格子游戏,银河英雄传说)
文章目录 序言 正文 亲戚 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 输入 输出 样例输入 样例输出 讲解 Wrong Answer Code Accepted Code ...
- 银河英雄传说 acwing-238 并查集
题面链接:238. 银河英雄传说 - AcWing题库 题面: 思路:并查集, 如果没有求两艘战舰之间的战舰数量,这就是一题很简单的并查集 但是这题需要计算两艘战舰之间的数量,我们就需要维护一个d数组 ...
- [NOI2002] 银河英雄传说(带权并查集好题)
题解: 用两个变量来维护: 1.sz[i]维护第i列元素的个数 2.pre[x]维护第x元素到当前队首的距离. 在并查集是不断维护这两个值. 至于如何维护看下图和文字解释 当然,这样维护还是不够的,对 ...
- 洛谷1196 银河英雄传说(并查集)
传送门 [题目分析] 题目整个就一赤裸裸的并查集啊....就多了一个记录深度.... 每次M操作就是merge x->y,每个并查集,记录父亲.大小.深度三个值,每次find父亲的时候记录深度即 ...
- 【NOI2002】【Luogu1196】银河英雄传说(并查集带边权)
problem 有30000条队列,初始每条队列一条战舰,编号为1-30000. 给出T条指令,分为合并和询问, 1.合并指令为: M i j 含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前 ...
- NOI银河英雄传说(并查集)
问题: 解决: 思路上比较简单,利用并查集 1.合并操作,直接将两个元素所在的树合并,并且将新的树里每个元素到根节点的距离更新 2.查询操作,有两种情况 a.两元素不在同一棵树里,说明距离无法计算,输 ...
- 银河英雄传说 ← 带权并查集
[问题描述] 有一个划分为N列的星际战场,各列依次编号为1,2,-,N. 有N艘战舰,也依次编号为1,2,-,N,其中第i号战舰处于第i列. 有T条指令,每条指令格式为以下两种之一: 1.M i j, ...
最新文章
- 基于跨国人口流动数据的新冠病毒传播途径分析
- 注重网站用户体验优化就要避开前方弯道
- [architecture]-DBG、DMB、DSB 和 ISB指令介绍
- webpack 编译stylus_webpack 文档更新日志(9.129.29)
- Java 新手习题()
- python可视化数据分析交互作用_一文轻松看懂线性回归分析的交互作用!
- Kotlin基础学习第6章—高阶函数
- 3.20计算机组成原理课堂笔记
- 海康威视4G球机对接萤石云平台实现实时预览、云台控制 ----- java完整demo
- HTML5 电子罗盘开发
- mathtype注册表
- 苹果手机读取html文件,教你如何解决“iTunes不能读取iPhone内容”的问题
- 3D变化——旋转的立方体
- mysql wating for_MySQL:关于Wating for Slave workers to free pending events等待
- 微信苹果多开系统官网下载页源码
- 【错误解决】SpringBoot邮件服务的一些错误及其解决方案
- 安装服务器的win pe系统教程,u盘pe安装win7系统教程图解
- 什么是继承,什么是多态,方法的重载和覆盖有何区别?
- qt5编译项目出现undefined reference to 'classname::staticmetaobject'
- 引争议!某高校硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...