2733: [HNOI2012]永无乡 线段树合并
题目:
https://www.lydsy.com/JudgeOnline/problem.php?id=2733
题解:
建n棵动态开点的权值线段树,然后边用并查集维护连通性,边合并线段树维护第k重要。
其实实现还是很简单的。。
代码:
#include<bits/stdc++.h> using namespace std; const int maxn=;
int fa[maxn],root[maxn],n,m,g[maxn],f[maxn],id;
char ch[]; struct Tr{
int lt,rt,num;
int ch[];
}tree[maxn<<]; void update(int now){
tree[now].num=tree[tree[now].ch[]].num+tree[tree[now].ch[]].num;
} int merge(int now,int last){
if(!now) return last;
else if(!last) return now;
if(tree[now].num<tree[last].num) swap(now,last);
tree[now].ch[]=merge(tree[now].ch[],tree[last].ch[]);
tree[now].ch[]=merge(tree[now].ch[],tree[last].ch[]);
update(now);return now;
} int ffa(int x){
return fa[x]==x?x:fa[x]=ffa(fa[x]);
} void connect(int u,int v){
int fu=ffa(u),fv=ffa(v);
if(fu!=fv) root[fu]=merge(root[fu],root[fv]),fa[fv]=fu;
} void build(int &now,int w,int lt,int rt){
now=++id;
tree[now].lt=lt,tree[now].rt=rt;
if(lt==rt){ tree[now].num=;return ;}
int mid=lt+rt>>;
if(w<=mid) build(tree[now].ch[],w,lt,mid);
else build(tree[now].ch[],w,mid+,rt);
update(now);
} int ask(int now,int k){
if(tree[now].num<k) return -;if(tree[now].lt==tree[now].rt) return tree[now].lt;
if(tree[tree[now].ch[]].num>=k) return ask(tree[now].ch[],k);
else return ask(tree[now].ch[],k-tree[tree[now].ch[]].num);
} int main(){
//freopen("1.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=n;i++){
scanf("%d",&g[i]);f[g[i]]=i;
build(root[i],g[i],,n);
} int u,v,x,y,tt;
for(int i=;i<=m;i++) scanf("%d%d",&u,&v),connect(u,v);
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%s%d%d",ch,&x,&y);
if(ch[]=='Q')
tt=ask(root[ffa(x)],y),printf("%d\n",tt==-?-:f[tt]);
else connect(x,y);
}
return ;
}
2733: [HNOI2012]永无乡 线段树合并的更多相关文章
- bzoj 2733 : [HNOI2012]永无乡 (线段树合并)
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- Bzoj 2733: [HNOI2012]永无乡(线段树+启发式合并)
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己 ...
- bzoj 2733: [HNOI2012]永无乡 -- 线段树
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...
- [HNOI2012]永无乡 线段树合并
[HNOI2012]永无乡 LG传送门 线段树合并练手题,写这篇博客只是为了给我的这篇文章找个板子题. 并查集维护连通性,对于不在同一个连通块内的合并操作每次直接合并两颗线段树,复杂度\(O(n \l ...
- bzoj2733: [HNOI2012]永无乡 线段树合并
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...
- BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...
- 洛谷P3224 [HNOI2012]永无乡(线段树合并+并查集)
题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...
- 【bzoj2733】[HNOI2012]永无乡 线段树合并
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集
用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...
随机推荐
- vs文件上传失败--超过最大字符限制
一.问题 在文件上传时,会遇到大文件上传失败. >F12查看报错网络请求返回结果 >问题分析 由于vs上传文件默认的字符大小控制. 二.解决方法 >在web.config中修改或添加 ...
- 安卓开发:UI组件-布局管理器和文本显示
接下来的随笔,记录了在学习b站up主:天哥在奔跑,录制的教学视频的同时,进行一个app开发. up主:天哥在奔跑 视频地址:https://www.bilibili.com/video/av38409 ...
- .NET 术语
.NET 术语 1. AOT 预编译器.与 JIT 类似,此编译器还可将 IL 转换为机器代码. 与 JIT 编译相比,AOT 编译在应用程序执行前进行并且通常在不同计算机上执行. 由于在运行时 AO ...
- cesium加载纽约市3dtiles模型
const tileset = new Cesium.Cesium3DTileset({ url: '../../assets/data/NewYork/tileset.json' }); viewe ...
- 【English】20190312
tokens记号 [ˈtoʊkən] delimiter characters分隔符字符 [dɪ'lɪmɪtə] [ˈkærɪktɚs] argument论据主题[ˈɑ:rgjumənt] ...
- A. Points in Segments(cf a题, 水题)
没什么好说的 #include<iostream> using namespace std; ], x, y,n, m, ans; int main(){ cin>>n> ...
- Linux:Day13(上) CentOS系统启动流程
CentOS 5和6的启动流程 Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: glibc 库:函数集合,functi ...
- Linux搜索文件、文件夹数、文件个数命令
1.查看某文件夹下文件的个数:ls -l|grep "^-"|wc -l 2.查看某文件夹下文件目录的个数:ls -l|grep "^d"|wc -l 3.查看 ...
- DIY 空气质量检测表
DIY 空气质量检测表 前几天逛淘宝看到有空气颗粒物浓度测量的传感器,直接是 3.3V TTL 电压串口输出的,也不贵,也就 100 多一点.觉得挺好就买了个,这两天自己捣鼓了个小程序,搞了个软件界面 ...
- WinForm调用钉钉获取考勤结果
关注点: 1.钉钉AccessToken的获取和防止过期 2.使用TPL并行编程调用钉钉接口 需求详解 公司前台有个大屏,领导想显示全部员工的考勤结果统计情况和车间的实时监控视频,还有车间的看板.简单 ...