博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-2733 永无乡
阅读量:4692 次
发布时间:2019-06-09

本文共 1842 字,大约阅读时间需要 6 分钟。

Treap+启发式合并。依旧没什么需要用到脑子的。

#include 
#include
#include
#include
#include
#include
#define rep(i, l, r) for(int i=l; i<=r; i++)#define clr(x, c) memset(x, c, sizeof(x))#define maxn 100009using namespace std;inline int read(){ int x=0; char ch=getchar(); while (!isdigit(ch)) ch=getchar(); while (isdigit(ch)) x=x*10+ch-'0', ch=getchar(); return x;}int n=read(), m=read();char q[5];int h[maxn], l[maxn], r[maxn], s[maxn], k[maxn], pr[maxn];inline void Init(){srand(2); rep(i, 1, n) s[i]=1, pr[i]=rand();}inline void update(int x){s[x]=s[l[x]]+s[r[x]]+1;}inline void Left(int v){ int u=r[v]; l[h[v]]==v ? l[h[v]]=u : r[h[v]]=u; h[u]=h[v]; r[v]=l[u], h[r[v]]=v; l[u]=v; h[v]=u; update(v), update(u);}inline void Right(int v){ int u=l[v]; l[h[v]]==v ? l[h[v]]=u : r[h[v]]=u; h[u]=h[v]; l[v]=r[u], h[l[v]]=v; r[u]=v, h[v]=u; update(v), update(u);}void Insert(int v, int u){ if (k[v] < k[u]) { if (!l[u]) {l[u]=v, h[v]=u; update(u); return;} Insert(v, l[u]); update(u); if (pr[l[u]] > pr[u]) Right(u); } else { if (!r[u]) {r[u]=v, h[v]=u, update(u); return;} Insert(v, r[u]); update(u); if (pr[r[u]] > pr[u]) Left(u); }}int Top(int v){return h[v]==0 ? v : Top(h[v]);}void Join(int v, int u){ if (v==u) return; if (s[v]>s[u]) swap(v, u); int a=l[v], b=r[v]; h[l[v]]=h[r[v]]=0, l[v]=r[v]=0, s[v]=1; Insert(v, u); if (a) Join(a, u); if (b) Join(b, u);}int Rank(int v, int k){ if (s[v]
k-1) v=l[v]; else k-=s[l[v]]+1, v=r[v]; return v;}int main(){ Init(); rep(i, 1, n) k[i]=read(); rep(i, 1, m) Join(Top(read()), Top(read())); int o=read(); rep(i, 1, o) { int x, y; scanf("%s%d%d", q, &x, &y); if (q[0]=='Q') printf("%d\n", Rank(Top(x), y)); else Join(Top(x), Top(y)); } return 0;}

  

转载于:https://www.cnblogs.com/NanoApe/p/4445342.html

你可能感兴趣的文章
win10应用UserControl
查看>>
Magento开发文档(二):Magento配置
查看>>
[LeetCode] 100. Same Tree Java
查看>>
BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
查看>>
查看手机已经记住的WIFI密码
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
Windows下命令(bat可用)
查看>>
我是怎么用缠论在商品里边抢钱之二 (2019-07-12 15:10:10)
查看>>
python入门之正则表达式
查看>>
SAS学习经验总结分享:篇五-过程步的应用
查看>>
Android创建文件夹及文件并写入数据
查看>>
file的getPath getAbsolutePath和getCanonicalPath的不同
查看>>
课时4—切入切出动画
查看>>
eclipse 编辑 python 中文乱码的解决方案
查看>>
Python 爬虫的集中简单方式
查看>>
数据库MySQL/mariadb知识点——触发器
查看>>
Ubuntu做Tomcat服务:insserv: warning: script 'tomcat' missing LSB tags and overrides
查看>>
Binary Agents
查看>>
入门Webpack,看这篇就够了
查看>>
短信拦截马”黑色产业链与溯源取证研究
查看>>