题目:

  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. (办公)TOKEN

    token就是HTTP认证,输入正确的token,在放在Authorization header中发送给服务器,认证成功.,就可以正确的拿到接口数据. 举个例子: 第一步:  客户端发送http re ...

  2. 详解MongoDB中的多表关联查询($lookup)

    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...

  3. Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee

    双击 勾上蓝色保存

  4. ASP.NET Zero--前期要求

    前期要求 需要以下工具才能使用ASP.NET Zero Core解决方案: Visual Studio 2017 + Visual Studio扩展: Bundler&Minifier Web ...

  5. tomcat设置开机启动

    一.windows 1. 下载tomcat 2. 进入bin目录,查看是否存在service.dat,如果没有自行创建 3. 打开cmd,进入tomcat>bin目录 说明:用法: servic ...

  6. telnet操作memcache

    1.使用方法 1. 连接到memcached telnet 192.168.1.100 11211 add name 0 60 5     [说明 add 是指令名  name 是key的名字 (是以 ...

  7. 【English】20190418

    interested 感兴趣的[ˈɪntrəstɪd] arrange your time 安排自己时间[əˈreɪndʒ] If interested, please arrange your ti ...

  8. Kafka设计解析(六)- Kafka高性能架构之道

    本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能.包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和 ...

  9. 【转】从源码分析Handler的postDelayed为什么可以延时?

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aliankg/article/details/70842494Thread/Hander/Loope ...

  10. NSSM安装服务

    NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行.同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大.它的特点如下: 支持普通 ...