并查集——银河英雄传说()
传送门:238. 银河英雄传说 - AcWing题库
思路:
使用并查集可以传递关系的性质,维护一个cnt[i]数组,该数组用于记录以i为跟并查集树下的战舰的数量,用一个d[i]数组表示在i前面的战舰的数量。
d数组和cnt数组的维护可以在get函数和merge函数时实现。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
const int N=3e4+10;
int d[N],f[N],cnt[N];
int get(int x)
{if(x==f[x]) return x;int u=get(f[x]);d[x]+=d[f[x]];return f[x]=u;
}
void merge(int x,int y)
{x=get(x),y=get(y); //找到x,y分别所在队列的首节点战舰f[x]=y;d[x]=cnt[y]; //原本一个首节点前面的战舰数量是零,但是现在接在了y后面,所以要加上cnt【y】,x后面的节点的d值会在下一次有关查找时更新。cnt[y]+=cnt[x]; //因为是将x所在的队列接到y后面所以是y加上x
}
int main()
{int t;for(int i=1;i<=N;i++){f[i]=i;cnt[i]=1;//每艘战舰自身的便算一个//d[i]=1; //这里不能初始化为1是因为一开始i前面的战舰的数量为零。}scanf("%d",&t);while(t--){char a[2];int b,c;scanf("%s%d%d",a,&b,&c);int x=get(b),y=get(c);if(a[0]=='C'){if(x==y){printf("%d\n",max(0,abs(d[b]-d[c])-1));}elseputs("-1");}elseif(x!=y)merge(x,y);}return 0;
}
并查集——银河英雄传说()相关推荐
- 蓝桥备赛第四周 同余+并查集
文章目录 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, ...
最新文章
- smartupload 上传文件时 把页面编码改成gbk 解决乱码
- UIWebView和UIActivityIndicatorView的结合使用
- 10个关于人工智能和机器学习的有趣开源项目
- 月薪40K的推荐算法工程师,需要具备怎样的技能?
- 多个DIV排列时居中
- Python 字符串/列表/元组/字典之间的相互转换 - Python零基础入门教程
- 获取input file绝对路径_IO--File对象
- 东北到底有没有互联网?!
- 七月老师python_七月在线Python数据分析入门
- 怎么在gif表情包上添加文字?
- knockout的监控数组实现 - 司徒正美
- 74cms 6.0.20版本文件包含漏洞复现
- python定向爬取淘宝中商品的名称和价格
- SQLDBX找不到服务器 no server found
- 新学期可以制定目标计划并提醒的便签软件是哪款?
- 04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
- 疯狂Java讲义中的程序,使用代理服务器来获取网上的资源
- 吴秀波事件女主,被耽误的高阶玩家,一年12个月烧钱游遍全世界
- Fass timeout detection implementation
- 助力智慧医疗|解析i.MX8MM在麻醉系统中的应用方案