luogu P2713 罗马游戏
思路
模拟就好
左偏树合并
并查集寻找
代码
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int maxn=1000005;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,m,f[maxn],rt[maxn];
bool vis[maxn];
int ch[maxn][2],val[maxn],dis[maxn];
int merge(int x,int y) {
if(!x || !y) return x+y;
if(val[x]>val[y]) swap(x,y);
ch[x][0]=merge(ch[x][0],y);
if(dis[ch[x][0]]<dis[ch[x][1]]) swap(ch[x][0],ch[x][1]);
dis[x]=dis[ch[x][1]]+1;
return x;
}
int find(int x) {return x==f[x] ? x : f[x]=find(f[x]);}
int main() {
n=read();
FOR(i,1,n) {
val[i]=read();
rt[i]=f[i]=i;
}
m=read();
FOR(i,1,m) {
char s[10];
scanf("%s",s);
if(s[0]=='M') {
int a=read(),b=read();
if(vis[a]||vis[b]) continue;
int fa=find(a),fb=find(b);
if(fa==fb) continue;
f[fb]=fa;
rt[fa]=merge(rt[fa],rt[fb]);
} else {
int a=read();
if(vis[a]) {
cout<<"0\n";
continue;
}
int fa=find(a);
cout<<val[rt[fa]]<<"\n";
vis[rt[fa]]=1;
rt[fa]=merge(ch[rt[fa]][0],ch[rt[fa]][1]);
}
}
return 0;
}
luogu P2713 罗马游戏的更多相关文章
- 洛谷P2713 罗马游戏
题目传送门 分析: 好吧,其实没什么好分析的,左偏树裸题. Code: #include<cstdio> #include<cstring> #include<cstdl ...
- 并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713
题面:P2713 罗马游戏 题解: 超级大水题啊,特别水.. 并查集维护每个人在哪个团里,优先队列维护每个团最低分和最低分是哪位,然后每次判断一下哪些人死了,随便写写就行 并查集在Merge时可以用启 ...
- 【BZOJ-1455】罗马游戏 可并堆 (左偏树)
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1355 Solved: 561[Submit][Status][Discuss] ...
- 【bzoj1455】罗马游戏 可并堆
2016-05-31 10:04:41 可并堆的裸题. 左偏树(小根堆为例 性质 1.满足堆的性质,每个节点权值小于左右儿子权值 2.每个节点有dis值,表示子树最浅的叶子深度加1 3.左子树dis ...
- C++之路进阶——bzoj1455(罗马游戏)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser gryz2016 Logout 捐赠本站 Notice:由于本OJ ...
- bzoj 1455: 罗马游戏 左偏树+并查集
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 668 Solved: 247[Submit][Status] Descriptio ...
- BZOJ 1455: 罗马游戏( 配对堆 + 并查集 )
可并堆水题 --------------------------------------------------------- #include<bits/stdc++.h> usin ...
- BZOJ 1455: 罗马游戏 [可并堆]
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1715 Solved: 718[Submit][Status][Discuss] ...
- BZOJ_1455_罗马游戏_可并堆
BZOJ_1455_罗马游戏_可并堆 Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢 ...
随机推荐
- (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
在Java或J2EE应用程序的设置文件或国际化对应的桌面应用程序的开发中,广泛使用着属性文件.然而,你必须通过J2SDK中的native2ascii工具来将文件中的多字节字符转换成Unicode的字符 ...
- html5-增强的表单
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Latex数学公式中的空格
http://blog.sina.com.cn/s/blog_4ddef8f80100iwwv.html 两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m ...
- 为什么我们要使用HTTP Strict Transport Security?
http://www.freebuf.com/articles/web/66827.html
- sqlyog下载
sqlyog下载(附注册码):http://www.onlinedown.net/soft/24926.htm
- vue 父子组件
组件 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊 ...
- make是如何工作的
在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一个目标文件(target),在上 ...
- scrapy instantiation
start from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'jokespider']) items.py import ...
- P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)
P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...
- MD5与SHA散列单项加密
MD5 MD5的英文全称是Message Digest Algorithm MD5,译为消息摘要算法第五版,是众多哈希算法中的一种(哈希算法是一种可以将任意长度的输入转化为固定长度输出的算法).因此M ...