题目地址:

https://www.luogu.com.cn/problem/P2713

题目描述:
罗马皇帝很喜欢玩杀人游戏。他的军队里面有nnn个士兵,每个士兵都是一个独立的团。最近举行了一次平面几何测试,每个士兵都得到了一个分数。皇帝很喜欢平面几何,他对那些得分很低的士兵嗤之以鼻。他决定玩这样一个游戏。它可以发两种命令:
M i j把iii所在的团和jjj所在的团合并成一个团。如果i,ji,ji,j有一个士兵是死人,那么就忽略该命令。
K i把iii所在的团里面得分最低的士兵杀死。如果iii这个士兵已经死了,这条命令就忽略。皇帝希望他每发布一条K i命令,下面的将军就把被杀的士兵的分数报上来(如果这条命令被忽略,那么就报000分)。保证士兵的分数互不相同。

输入格式:
第一行一个整数nnn,表示士兵数。
第二行nnn个整数a1,a2,…ana_1,a_2,\ldots a_na1​,a2​,…an​,其中aia_iai​表示编号为iii的士兵的分数。
第三行一个整数mmm。
第3+i3+i3+i行描述第i条命令。命令为如下两种形式:M i jK i

输出格式:
如果命令是K i,对应的请输出被杀士兵的分数(如果这个人不存在,就输出000)。

数据范围:
对于100%100\%100%的数据,1≤n≤1061\le n\le 10^61≤n≤106,1≤m≤1051\le m\le 10^51≤m≤105,0≤ai≤1070\le a_i\le 10^70≤ai​≤107,注意测试数据中M i j的i,ji,ji,j可能在同一个团中。

可以用左偏树,参考https://blog.csdn.net/qq_46105170/article/details/126204599。代码如下:

#include <iostream>
using namespace std;const int N = 1e6 + 10;
int n, m;
int v[N], d[N], l[N], r[N];
int p[N];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int merge(int x, int y) {if (!x || !y) return x ^ y;if (v[x] > v[y]) swap(x, y);r[x] = merge(r[x], y);if (d[l[x]] < d[r[x]]) swap(l[x], r[x]);d[x] = d[r[x]] + 1;return x;
}int main() {v[0] = 2e9;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &v[i]);p[i] = i;d[i] = 1;}scanf("%d", &m);while (m--) {char op;int x, y;cin >> op >> x;if (op == 'M') {cin >> y;if (!d[x] || !d[y]) continue;x = find(x), y = find(y);if (x == y) continue;if (v[x] > v[y]) swap(x, y);p[y] = x;merge(x, y);} else {if (!d[x]) {puts("0");continue;}x = find(x);d[x] = 0;printf("%d\n", v[x]);if (v[l[x]] > v[r[x]]) swap(l[x], r[x]);p[x] = p[l[x]] = l[x];merge(l[x], r[x]);}}
}

每次操作时间复杂度O(log⁡n)O(\log n)O(logn),空间O(n)O(n)O(n)。

【洛谷】P2713 罗马游戏相关推荐

  1. 洛谷P2713 罗马游戏

    题目传送门 分析: 好吧,其实没什么好分析的,左偏树裸题. Code: #include<cstdio> #include<cstring> #include<cstdl ...

  2. 洛谷2713 罗马游戏(可并堆,左偏树)

    模板题 没什么好说的. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include<al ...

  3. 洛谷 P2197 nim游戏

    洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...

  4. 洛谷 P1558 色板游戏

    传送门:洛谷 P1558 色板游戏 算法分析:观察到数据范围:\(1\leq T\leq 30\) ,考虑使用二进制来进行状态压缩 将颜色\(x\)表示为 \(1<<(x-1)\) 即 \ ...

  5. 洛谷 P1129 矩阵游戏

    洛谷 P1129 矩阵游戏 题目链接 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个 n×n 黑白方阵进行(如同国际象棋一般,只是颜色是 ...

  6. 洛谷 P3041 视频游戏的连击Video Game Combos(AC自动机+拓扑排序+数位DP)

    洛谷 P3041 视频游戏的连击Video Game Combos 难度一般,不过这个数位DP其实应该叫做记忆化搜索 题意:玩游戏时可以通过按键组合打出combo技能:然后是已知N个combo的按键方 ...

  7. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  8. 洛谷——P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 另外强烈推荐新用户必读贴 题目描述 超级玛丽是一个非常经典的游戏. ...

  9. 洛谷P1000 超级玛丽游戏C++题解

    首先我们看这道题的题目"超级玛丽游戏",第一道题就让我们写个游戏出来.结果点进去一看,顿时觉得这道题是在开玩笑,本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续 ...

  10. 洛谷 P4815 狼人游戏 题解

    洛谷 P4815 [CCO2014] 狼人游戏 首先题目中有 3 3 3 个限制: 没有机器人又被指控又被保护: 没有机器人被指控或保护一次以上: 如果有一个编号为 A A A 机器人指控或保护编号为 ...

最新文章

  1. 前端ajax封装对象数组,后台的取法
  2. 添加服务引用的本质是什么?
  3. [云炬创业学笔记]第一章创业是什么测试9
  4. 传统公司部署OpenStack(t版)简易介绍(七)——cinder模块部署
  5. uva 11536——Smallest Sub-Array
  6. 如何把一个java程序打包成exe文件,运行在没有java虚
  7. 软件工程第一次结对编程
  8. Docker容器的单进程模型
  9. ROS入门-12.服务端Server的编程实现
  10. 用python画三角函数
  11. ubuntu的无线网无法连上
  12. 网课题库接口搭建步骤
  13. 二元一次方程编程解鸡兔同笼问题
  14. UVA-2【NOI2014】起床困难综合症
  15. 【2022 年第十二届 MathorCup杯数学建模】D 题 移动通信网络站址规划和区域聚类问题 赛后总结、论文及代码
  16. 令人耳目一新的人类进化,读《人类简史》有感
  17. 公积金查询,公积金账号查询
  18. 程序媛眼中的 PingCAP:无法抗拒的五大吸引力 | PingCAP 招聘季
  19. 不靠谱的Access 轻松破解密码
  20. WARN com.atomikos.datasource.xa.XATransactionalResource - Error in recovery

热门文章

  1. leetcode汇总
  2. 实验 详解K8S多节点部署群集
  3. oracle异常日志在哪,Oracle 11g 中告警日志的位置
  4. qq四国军旗2.1 beat03 builde018记牌器开发思路(三)
  5. Python输入三角形的三条边求面积,输入圆的半径输出面积周长的两个程序的代码
  6. java毕业生设计疫情防控网站计算机源码+系统+mysql+调试部署+lw
  7. 计算面积的计算机软件,CAD计算面积的快捷键是什么?
  8. 何为非侵入式负荷监测-目标检测
  9. 发布DCWriter电子病历文本编辑器
  10. 腾讯游戏云以科技连接游戏未来,全力打造行业新生态