题目链接

分析

可以把每艘战舰进入队列时的顺序作为 属性值,表示为这艘战舰到队列头部战舰的距离,用d[i]表示i号战舰到头部战舰的距离,每次把一个战舰队列接到另一个战舰队列的尾部时, 把前者头部战舰的d[i]改为后者整个队列的长度, 然后后者队列长度 再加上前者队列长度

代码 (带权并查集)

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 3e4 + 10;
int p[N], Size[N], d[N],  n, k;int find(int x) {if (p[x] != x) {//使用root保存当前集合的根节点int root = find(p[x]);//加上原来的根节点到它上一个节点的距离 d[x] += d[p[x]];      p[x] = root;}return p[x];
}int main() {scanf("%d", &n);//输入指令次数/*初始化并查集数组和Size数组,Size[i]表示集合i有多少元素,只有根节点才有效*/for (int i = 1; i <= N;i++) {p[i] = i;Size[i] = 1;}string op;int a, b;while (n--) {cin >> op;scanf("%d%d", &a, &b);if (op == "M") {int pa = find(a);int pb = find(b);//将a所在的集合融入b所在的集合p[pa] = pb;//a本来到根节点的距离为0,现在是b所在的集合的大小d[pa] = Size[pb];//b所在的集合大小加上a所在的集合的大小Size[pb] += Size[pa];} else {int pa = find(a);int pb = find(b);//如果不是同一个集合,即不是同一列,输出-1if (pa != pb) printf("-1\n");/*如果是同一个集合,输出两个元素之间的相对距离-1;如果两个元素是相同的,则输出0*/else printf("%d\n", max(0, abs(d[a] - d[b]) - 1));}}
}

AcWing 238. 银河英雄传说(C++)相关推荐

  1. Acwing 238. 银河英雄传说

    Acwing 238. 银河英雄传说 有一个划分为 N 列的星际战场,各列依次编号为 1,2,-,N. 有 N 艘战舰,也依次编号为 1,2,-,N,其中第 i 号战舰处于第 i 列. 有 T 条指令 ...

  2. 238. 银河英雄传说(并查集,扩展域)

    ​​​​​​238. 银河英雄传说 - AcWing题库 分析: 由于要求i,j战舰之间的距离,我们就应该想到拓展域 拓展域要实现: 能够计算第i艘战舰到第j艘战舰距离 我们可以用一个拓展域来存储战舰 ...

  3. 算法——AcWing算法提高课中代码和题解

    文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...

  4. 【高级数据结构】并查集

    目录 A.AcWing 1250. 格子游戏 B.AcWing 1252. 搭配购买 C.AcWing 237. 程序自动分析 D.AcWing 239. 奇偶游戏 E.AcWing 238. 银河英 ...

  5. 0x41.数据结构进阶 - 并查集

    目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...

  6. 数据结构进阶之并查集

    1.初探并查集 例题1:AcWing 237.程序自动分析 这题的思路其实比较好想,只要先考虑所有等于的情况并合并,然后再看不等于的情况,看是否出现矛盾即可.但是这题显然是需要离散化的,但是离散化也很 ...

  7. 【Acwing并查集】238. 银河英雄传说

    238. 银河英雄传说 - AcWing题库 题意: 思路: 并查集维护两个信息:每个连通块的size和每个结点之间的距离 对于连通块的size,只需要在合并的时候维护一下就好了 对于每个结点之间的距 ...

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

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

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

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

最新文章

  1. JAVA服务器搭建之问题总结
  2. 百分点大数据技术团队:乘风破浪 海外数据中台项目实践
  3. C# 操作XML入门
  4. DB天气app冲刺第四天
  5. 常用UI模板,loading框,提醒框,弹框确认框
  6. 全面理解Java中的String数据类型
  7. oracle导出超链接,Oracle Report中加入下载超链接操作方法
  8. ps导出gif颜色不对_PS基础知识(1)
  9. 简单总结手机app测试,弱网测试
  10. RabbitMQ小笔记
  11. 通通玩blend美工(1)——荧光Button
  12. Python之GUI编程 实现界面化的词云图生成器.exe
  13. 怎么用别的方法里的变量_微波炉烤鸡翅的方法 怎么用微波炉烤鸡翅
  14. c语言中 x20是什么意思,转义字符的问题,\ x00- \ x20是什么意思
  15. 3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他
  16. twig php函数,TWIG的 function 学习
  17. 实验管理系统springboot+vue+element ui项目开发
  18. java区分登陆者的设备(手机还是电脑)
  19. Java shiro权限管理框架视频教程
  20. 【Oracle数据库丢失表排查思路】

热门文章

  1. 世上无难事,只怕有心人
  2. Nvidia TX2爬坑过程——1、入手刷机教程
  3. LeetCode-买卖股票的最佳时机 II
  4. 宏信证券手机网上开户流程
  5. 美四千多宠物中毒死 中国承认两企业出口饲料含毒
  6. 从后台得到webshell十大技巧大汇总(转)
  7. 大虾救命啊~~~~~~~~~~
  8. justify-content属性无效
  9. Q4净利润同比增长46.5% 腾讯音乐终于“好听又好看”了?
  10. 基于matlab的音频信号低通滤波实验