银河英雄传说

解:对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;
}

并查集——银河英雄传说相关推荐

  1. 并查集——银河英雄传说()

    传送门:238. 银河英雄传说 - AcWing题库 思路: 使用并查集可以传递关系的性质,维护一个cnt[i]数组,该数组用于记录以i为跟并查集树下的战舰的数量,用一个d[i]数组表示在i前面的战舰 ...

  2. 蓝桥备赛第四周 同余+并查集

    文章目录 0x33 同余 同余类+剩余系+费马小定理+欧拉定理及推论 最幸运的数字 题解 这次的代码很多东西:欧拉函数快速求解,gcd,快速乘,各种定理,建议当模板背 10LL 转换成长整型 快速乘+ ...

  3. 【并查集】银河英雄传说 (luogu 1196/ssl 1225)

    银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...

  4. 并查集专题(亲戚,格子游戏,银河英雄传说)

    文章目录 序言 正文 亲戚 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 输入 输出 样例输入 样例输出 讲解 Wrong Answer Code Accepted Code ...

  5. 银河英雄传说 acwing-238 并查集

    题面链接:238. 银河英雄传说 - AcWing题库 题面: 思路:并查集, 如果没有求两艘战舰之间的战舰数量,这就是一题很简单的并查集 但是这题需要计算两艘战舰之间的数量,我们就需要维护一个d数组 ...

  6. [NOI2002] 银河英雄传说(带权并查集好题)

    题解: 用两个变量来维护: 1.sz[i]维护第i列元素的个数 2.pre[x]维护第x元素到当前队首的距离. 在并查集是不断维护这两个值. 至于如何维护看下图和文字解释 当然,这样维护还是不够的,对 ...

  7. 洛谷1196 银河英雄传说(并查集)

    传送门 [题目分析] 题目整个就一赤裸裸的并查集啊....就多了一个记录深度.... 每次M操作就是merge x->y,每个并查集,记录父亲.大小.深度三个值,每次find父亲的时候记录深度即 ...

  8. 【NOI2002】【Luogu1196】银河英雄传说(并查集带边权)

    problem 有30000条队列,初始每条队列一条战舰,编号为1-30000. 给出T条指令,分为合并和询问, 1.合并指令为: M i j 含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前 ...

  9. NOI银河英雄传说(并查集)

    问题: 解决: 思路上比较简单,利用并查集 1.合并操作,直接将两个元素所在的树合并,并且将新的树里每个元素到根节点的距离更新 2.查询操作,有两种情况 a.两元素不在同一棵树里,说明距离无法计算,输 ...

  10. 银河英雄传说 ← 带权并查集

    [问题描述] 有一个划分为N列的星际战场,各列依次编号为1,2,-,N. 有N艘战舰,也依次编号为1,2,-,N,其中第i号战舰处于第i列. 有T条指令,每条指令格式为以下两种之一: 1.M i j, ...

最新文章

  1. 基于跨国人口流动数据的新冠病毒传播途径分析
  2. 注重网站用户体验优化就要避开前方弯道
  3. [architecture]-DBG、DMB、DSB 和 ISB指令介绍
  4. webpack 编译stylus_webpack 文档更新日志(9.129.29)
  5. Java 新手习题()
  6. python可视化数据分析交互作用_一文轻松看懂线性回归分析的交互作用!
  7. Kotlin基础学习第6章—高阶函数
  8. 3.20计算机组成原理课堂笔记
  9. 海康威视4G球机对接萤石云平台实现实时预览、云台控制 ----- java完整demo
  10. HTML5 电子罗盘开发
  11. mathtype注册表
  12. 苹果手机读取html文件,教你如何解决“iTunes不能读取iPhone内容”的问题
  13. 3D变化——旋转的立方体
  14. mysql wating for_MySQL:关于Wating for Slave workers to free pending events等待
  15. 微信苹果多开系统官网下载页源码
  16. 【错误解决】SpringBoot邮件服务的一些错误及其解决方案
  17. 安装服务器的win pe系统教程,u盘pe安装win7系统教程图解
  18. 什么是继承,什么是多态,方法的重载和覆盖有何区别?
  19. qt5编译项目出现undefined reference to 'classname::staticmetaobject'
  20. 引争议!某高校硕导提议高校教师应多配偶,这样就能多生娃!高校的处理通报来了...

热门文章

  1. 我的第一个JDBC小项目
  2. 微信分享网络图片到朋友圈和收藏不显示图片的问题
  3. 互联网究竟是怎么诞生的?
  4. uniapp判断是否打开定位GPS
  5. 程序员追星如此硬核?杨超越杯编程大赛获奖项目大盘点!
  6. 小记一次海量数据实时查询域名库设计(上)
  7. Swin Transformer代码讲解
  8. TB5 AXD 在win7 vista下 启动失败
  9. 树莓派的mjpeg-streamer实现简单的监控功能
  10. aix查看lv_AIX中的硬盘、PP、VG、LV、文件系统