题目:

  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. 腾讯云服务器配置node环境

    1:更新现有包 sudo apt-get update 2:安装依赖 sudo apt-get install vim openssl build-essential libssl-dev wget ...

  2. hadoop1.0 和 Hadoop 2.0 的区别

    1.Hadoop概述 在Google三篇大数据论文发表之后,Cloudera公司在这几篇论文的基础上,开发出了现在的Hadoop.但Hadoop开发出来也并非一帆风顺的,Hadoop1.0版本有诸多局 ...

  3. 07-Vue的基础使用

    vue的介绍 前端框架和库的区别 nodejs的简单使用 vue的起步 指令系统 组件的使用 过滤器的使用 watch和computed 钩子函数 渐进式的JavaScript框架 vue react ...

  4. linux Page cache和buffer cache正解

    Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时 ...

  5. windows环境下安装yaf框架

    windows环境下安装yaf框架 在windows下安装yaf框架 准备工作: php环境(过程略,wamp,xampp,phpstudy都行,php版本大于5.3) git工具(需要从github ...

  6. Linux之Samba部署

    1.Samba介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成,SMB(Server Messages Block,信息服务块)是一种 ...

  7. June. 24th 2018, Week 26th. Sunday

    Beautiful things don't ask for attention. 真正美丽的东西,并不会刻意寻求别人的注目. From The Secret Life of Walter Mitty ...

  8. 前端学习-基础部分-css(一)

    开始今日份整理 1.CSS的导入方式 CSS的导入方式主要是有内联模式,行内模式,外部样式表 1.1 内联模式 内联模式:直接在<head>中直接写css,例如 p{ color:rgb( ...

  9. day16-面向对象基础(三)

    今日摘要 今天主要整理一下这俩天学习的内容,面向对象也快学完了,深刻的认识到面向对象就是一个思想,怎么把思想理解了,其他也就不是什么事了 1.类的约束 2.类的类方法与静态方法 3.类的反射 4.类的 ...

  10. 如何将Bitcoin比特币区块链数据导入关系数据库

    在接触了比特币和区块链后,我一直有一个想法,就是把所有比特币的区块链数据放入到关系数据库(比如SQL Server)中,然后当成一个数据仓库,做做比特币交易数据的各种分析.想法已经很久了,但是一直没有 ...