AC日记——[HNOI2012]永无乡 bzoj 2733
思路:
启发式合并splay(n*log^2n);
来,上代码:
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- #define maxn 100001
- int n,q,tot,ch[maxn*][],key[maxn*],w[maxn*],opi[maxn*],m;
- int size[maxn*],root[maxn],id[maxn*],f[maxn],cnt,dis[maxn*],lar[maxn];
- inline void in(int &now)
- {
- char Cget=getchar();now=;
- while(Cget>''||Cget<'') Cget=getchar();
- while(Cget>=''&&Cget<='')
- {
- now=now*+Cget-'';
- Cget=getchar();
- }
- }
- inline int getson(int now)
- {
- return ch[opi[now]][]==now;
- }
- inline void updata(int now)
- {
- size[now]=w[now];
- if(ch[now][]) size[now]+=size[ch[now][]];
- if(ch[now][]) size[now]+=size[ch[now][]];
- }
- inline void rotate(int now)
- {
- int fa=opi[now],ffa=opi[fa],pos=getson(now);
- ch[fa][pos]=ch[now][pos^];
- if(ch[fa][pos]) opi[ch[fa][pos]]=fa;
- if(ffa) ch[ffa][getson(fa)]=now;
- ch[now][pos^]=fa,opi[fa]=now,opi[now]=ffa;
- updata(fa),updata(now);
- }
- inline void splay(int now,int to)
- {
- for(int fa;fa=opi[now];rotate(now))
- {
- if(opi[fa]) rotate(getson(now)==getson(fa)?fa:now);
- }
- root[to]=now;
- }
- inline void insert(int x,int y,int to)
- {
- if(!root[to])
- {
- root[to]=++tot,key[tot]=x,w[tot]=size[tot]=,id[tot]=y;
- return ;
- }
- int now=root[to],fa=;
- while()
- {
- fa=now;
- if(x<key[now]) now=ch[now][];
- else now=ch[now][];
- if(!now)
- {
- now=ch[fa][x>key[fa]]=++tot;
- key[now]=x,id[now]=y,w[now]=size[now]=,opi[now]=fa;
- splay(now,to);break;
- }
- }
- }
- inline int find(int x)
- {
- if(x==f[x]) return x;
- return f[x]=find(f[x]);
- }
- inline int irank(int k,int to)
- {
- int now=root[to];
- while()
- {
- int dis=size[ch[now][]];
- if(k<=dis) now=ch[now][];
- else
- {
- k-=dis;
- if(k<=w[now])
- {
- splay(now,to);
- return id[now];
- }
- else k-=w[now],now=ch[now][];
- }
- }
- }
- inline void merge(int noww,int now)
- {
- if(!now) return ;
- if(ch[now][]) merge(noww,ch[now][]);
- insert(key[now],id[now],noww);
- if(ch[now][]) merge(noww,ch[now][]);
- }
- int main()
- {
- in(n),in(m);int x,y;char ch[];
- for(int i=;i<=n;i++) in(dis[i]),f[i]=i,insert(dis[i],i,i),lar[i]=;
- for(;m--;)
- {
- in(x),in(y);
- x=find(x),y=find(y);
- if(lar[x]<lar[y]) swap(x,y);lar[x]+=lar[y];
- if(x!=y) f[y]=x,merge(x,root[y]);
- }
- in(q);
- for(;q--;)
- {
- scanf("%s",ch);in(x),in(y);
- if(ch[]=='Q')
- {
- x=find(x);
- if(y<=size[root[x]]) printf("%d\n",irank(y,x));
- else printf("-1\n");
- }
- else
- {
- x=find(x),y=find(y);
- if(lar[x]<lar[y]) swap(x,y);lar[x]+=lar[y];
- if(x!=y) f[y]=x,merge(x,root[y]);
- }
- }
- return ;
- }
AC日记——[HNOI2012]永无乡 bzoj 2733的更多相关文章
- 2733: [HNOI2012]永无乡 - BZOJ
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- bzoj 2733: [HNOI2012]永无乡 离线+主席树
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1167 Solved: 607[Submit][Status ...
- BZOJ 2733: [HNOI2012]永无乡(treap + 启发式合并 + 并查集)
不难...treap + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...
- BZOJ 2733: [HNOI2012]永无乡 [splay启发式合并]
2733: [HNOI2012]永无乡 题意:加边,询问一个连通块中k小值 终于写了一下splay启发式合并 本题直接splay上一个节点对应图上一个点就可以了 并查集维护连通性 合并的时候,把siz ...
- bzoj 2733: [HNOI2012]永无乡 -- 线段树
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...
- Bzoj 2733: [HNOI2012]永无乡 数组Splay+启发式合并
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3955 Solved: 2112[Submit][Statu ...
- Bzoj 2733: [HNOI2012]永无乡(线段树+启发式合并)
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己 ...
- 线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostr ...
随机推荐
- Entity FrameWork和Dapper的使用
EF是微软系列下的更正苗红的重量级的ORM框架,功能强大,操作数据库的时候几乎不用写sql,可以像写C#代码一样操作数据库,尤其支持多表关联操作的时候极为方便,但是生成的sql语句性能很差,实在不敢恭 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 's.areaname' in 'field list'错误
在使用mybatis框架做查询的时候,出现了如下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown colum ...
- Windows下使用Nginx+tomcat配置负载均衡
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口 ...
- [网站公告]又拍云API故障造成图片无法上传
大家好,今天早上8:30左右发现又拍云API出现故障,造成图片无法上传,调用图片上传API时出现错误:“The operation has timed out”. 该故障给大家带来了麻烦,望大家谅解! ...
- ajax向Asp.NET后端传递数组型数据
近日,在开发一个组件的过程中,需要通过Ajax对象向Asp.NET后端传递一个比较复杂的表单,表单中的一个字段是数组类型,我能想到的办法是用JSON.stringify将前端的数组对象序列化成字符串, ...
- 小程序使用Canvas画饼图
先上效果图 -------------------------------------------------------------wxml代码开始------------------------- ...
- JMeter学习笔记(十一) 关于 CSV Data Set Config 的 Sharing mode 对取值的影响
关于 CSV Data Set Config 的一些介绍之前已经梳理过了,可以参考: https://www.cnblogs.com/xiaoyu2018/p/10184127.html . 今天主要 ...
- 1079 Total Sales of Supply Chain (25 分)(树的遍历)
给出一颗销售供应的树,树根唯一.在树根处货物的价格为p,然后从根节点开始没往结点走一层,该层的货物价格将会在父节点的价格上增加r%.给出每个叶节点的货物量求出他们的价格之和 #include<b ...
- VS配置使用第三方库
VS使用第三方库 项目设置 调整头文件引用目录 C/C++ -> General -> Additional Include Directories 添加库文件目录 Linker -> ...
- 聊聊、Git 常用命令
创建本地仓库git initgit add .git commit -m "xxxxx"git remote add origin http://git.xxx.com/xxx.g ...