题目描述

1行n列,每列有一个战舰。有两类指令,一种是让第 i 号战舰所在列的全部战舰保持原有顺序,接在第 j 号战舰所在列的尾部,另一种是问两个战舰是否在同一列,若在同一列要知道它们之间间隔了多少艘战舰。

链接


分析

考虑要知道两艘战舰间隔了多少艘战舰,直接维护起来比较麻烦,可转化为两艘战舰到这一列队首战舰的距离,这样两艘战舰间隔的战舰数就是他们到队首距离之差的绝对值减去1。
因此可以用边带权并查集来做了,合并两个集合时为了更新到父节点距离,所以还要额外维护一个集合元素个数。

代码

#include <bits/stdc++.h>
using namespace std;const int N = 30010;int fa[N], siz[N], d[N];int get(int x)
{if (fa[x] == x) return x;int r = get(fa[x]);d[x] += d[fa[x]];return fa[x] = r;
}int main()
{for (int i = 1; i < N; i++) fa[i] = i, siz[i] = 1, d[i] = 0;int m;scanf("%d", &m);for (int i = 1; i <= m; i++){char s[3];int x, y;scanf("%s%d%d", s, &x, &y);int rx = get(x), ry = get(y);if (s[0] == 'M' && rx != ry){d[rx] = siz[ry];siz[ry] += siz[rx];fa[rx] = ry;}else{if (rx == ry)printf("%d\n", abs(d[x] - d[y]) - 1);else puts("-1");}}return 0;
}

银河英雄传说(边带权并查集)相关推荐

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

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

  2. 洛谷 P1196 [NOI2002]银河英雄传说 带权并查集

    https://www.luogu.org/problem/P1196 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展 ...

  3. NOI2002银河英雄传说——带权并查集

    题目:https://www.luogu.org/problemnew/show/P1196 关键点在于存下每个点的位置. 自己糊涂的地方:位置是相对于谁的位置? 因为每次给一个原来是fa的点赋位置时 ...

  4. 图论8 并查集深入解析——边带权并查集和拓展域并查集和最小生成树

    我们先复习一下并查集的基本知识. 并查集的三个操作:查询,初始化,合并:并查集的结构:操作方法以及代码:路径压缩优化(详见<图论7 弗洛伊德&并查集算法详解>). 补充一下,并查集 ...

  5. 学习笔记——拓展域并查集和带权并查集

    1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...

  6. 2017乌鲁木齐区域赛I(带权并查集)

    #include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...

  7. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  8. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

  9. POJ1988(带权并查集,搬砖块)

    题意:        可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...

最新文章

  1. 从零开始系列-Project 2010视频教程 (102课时)
  2. 缓存DNS域名解析服务器的制作方法
  3. Android注解使用之ButterKnife 8.0注解使用介绍
  4. 我是主考官:应聘者给我的圈套
  5. jQuery里的promise
  6. (42)css特异性
  7. springboot mysql事物_SpringBoot事务详细简介
  8. 【转载】C#中回滚TransactionScope的使用方法和原理
  9. 【TSP】基于matlab蚁群算法求解旅行商问题【含Matlab源码 398期】
  10. bzero 和 memset 函数对比
  11. 大学计算机应用基础教学设计,大学计算机应用基础电子教案设计.doc
  12. 2021-10-26 模电共射放大电路部分
  13. 抖音播放量不到200,新手该如何自救?
  14. 模电——电源与地之间串联电容的作用
  15. 寻宝游戏设定_第1集的答案(寻宝游戏)
  16. .net core3.1 abp学习开始(一)
  17. php plaintext,php从邮件正文中提取text / plain
  18. 前端的工程化、模块化和组件化
  19. CHP城市猎人系统开发
  20. Java标准简历制作

热门文章

  1. 微信小程序识别图片并提取文字_微信小程序(图像识别,文字识别)
  2. ida调试linux程序,[原创]IDA动态调试ELF
  3. 每天一个PS/PR小技巧(原理+实践)
  4. 游戏公会在去中心化游戏中的未来
  5. java游戏繁体字名字_2020好听的繁体字游戏名字
  6. javafx写一个小游戏-井字棋
  7. 怎么把一堆名字放到excel_怎么复制文件并且改名字 一堆名字复制到excel
  8. 游戏网络通信数据解析_1
  9. 抖音上情侣玩的小游戏--猜数字 单身狗 没朋友也能玩 附HTML源码
  10. 收获节任务:缅怀英雄