传送门: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;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. smartupload 上传文件时 把页面编码改成gbk 解决乱码
  2. UIWebView和UIActivityIndicatorView的结合使用
  3. 10个关于人工智能和机器学习的有趣开源项目
  4. 月薪40K的推荐算法工程师,需要具备怎样的技能?
  5. 多个DIV排列时居中
  6. Python 字符串/列表/元组/字典之间的相互转换 - Python零基础入门教程
  7. 获取input file绝对路径_IO--File对象
  8. 东北到底有没有互联网?!
  9. 七月老师python_七月在线Python数据分析入门
  10. 怎么在gif表情包上添加文字?
  11. knockout的监控数组实现 - 司徒正美
  12. 74cms 6.0.20版本文件包含漏洞复现
  13. python定向爬取淘宝中商品的名称和价格
  14. SQLDBX找不到服务器 no server found
  15. 新学期可以制定目标计划并提醒的便签软件是哪款?
  16. 04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
  17. 疯狂Java讲义中的程序,使用代理服务器来获取网上的资源
  18. 吴秀波事件女主,被耽误的高阶玩家,一年12个月烧钱游遍全世界
  19. Fass timeout detection implementation
  20. 助力智慧医疗|解析i.MX8MM在麻醉系统中的应用方案

热门文章

  1. 百度收录技巧有哪些?2022百度文章收录技巧大全
  2. 虾皮店铺有哪些涨粉方法?知虾数据教你八招快速涨粉技巧
  3. 深度详解什么是SaaS(软件即服务)
  4. 【数据治理】数据分析八大模型:OGSM模型
  5. (十八)【模电】(放大电路中的反馈)交流负反馈对放大电路性能的影响
  6. (转)从17家顶级基金退出情况中反思投资机构退出之道
  7. arch linux安装_安装Arch Linux如何使我的旧笔记本电脑重获新生
  8. java毕业设计保险公司风险测评管理系统Mybatis+系统+数据库+调试部署
  9. 美术集网校—素描头像画不好?找出关键点才重要
  10. 实验七 Oracle数据库安全管理