题目:

  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]永无乡 线段树合并的更多相关文章

  1. bzoj 2733 : [HNOI2012]永无乡 (线段树合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  2. Bzoj 2733: [HNOI2012]永无乡(线段树+启发式合并)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己 ...

  3. bzoj 2733: [HNOI2012]永无乡 -- 线段树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MB Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自 ...

  4. [HNOI2012]永无乡 线段树合并

    [HNOI2012]永无乡 LG传送门 线段树合并练手题,写这篇博客只是为了给我的这篇文章找个板子题. 并查集维护连通性,对于不在同一个连通块内的合并操作每次直接合并两颗线段树,复杂度\(O(n \l ...

  5. bzoj2733: [HNOI2012]永无乡 线段树合并

    永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...

  6. BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并

    题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达 ...

  7. 洛谷P3224 [HNOI2012]永无乡(线段树合并+并查集)

    题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...

  8. 【bzoj2733】[HNOI2012]永无乡 线段树合并

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  9. BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集

    用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...

随机推荐

  1. [Android][Recovery] Recovery下找不到sdcard路径

    做升级的时候,把更新包拷贝到sd卡中,然后调用接口进行重启升级 wossoneri.github.io File update_file = new File("/sdcard/update ...

  2. java之日志管理

    一. 为什么要使用日志 二. 常见日志框架介绍 三. Logback+SLF4J实战 四. 项目源码下载 五. 参考文章   一. 为什么要使用日志 1. 对IT安全至关重要   当您使用强大的日志管 ...

  3. [Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  4. linux快捷进入长目录的方法

    快捷命令   :alias chaoyang ='cd /usr/lib/uu/hh/lib' 1.将上述设置写到家目录的.bashrc文件中(~/.bashrc) 2.然后source ./bash ...

  5. AngularJS学习之旅—AngularJS SQL(十二)

    一.使用 PHP 从 MySQL 中获取数据 <div ng-app="myApp" ng-controller="customersCtrl"> ...

  6. 【学习】Linux Shell脚本实例之一

    1.程序流程控制实例 程序流程控制,实际上就是改变程序的执行顺序.程序在执行过程中若流程被改变,就可能导致输出不同,因此利用这一特性就能够实现程序执行结果的控制.程序流程控制可分为“选择”和“循环”这 ...

  7. 记录Nginx模块开发

    --with-http_stub_status_module模块:Nginx的客户端状态 Syntax:stub_status Default:-- Content:server,location l ...

  8. Python开发【内置模块篇】日志模块

    logging配置 import logging logging.basicConfig(level=logging.WARNING, format='%(asctime)s %(filename)s ...

  9. json 解析错误的问题

    “/”应用程序中的服务器错误. 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe ...

  10. vue2.0 :style :class样式设置

    HTML :style 的用法 <el-dialog custom-class="creatUser-wrap" :style="{display:formShow ...