2733: [HNOI2012]永无乡
来源:互联网 发布:java object转date 编辑:程序博客网 时间:2024/05/16 15:01
题目链接
题目大意:有n个点,初始时有一些边。
每次操作要么加一条边,要么询问一个点所在联通块数值第k大的点。
题解:并查集+权值线段树合并
我的收获:线段树合并
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int M=100005;const int TM=2000005;int n,m,cnt;int f[M],a[M],id[M];int root[M],sum[TM],tl[TM],tr[TM];inline int fid(int x){return f[x]==x?x:f[x]=fid(f[x]);}void build(int k,int l,int r,int &x){ if(!x) x=++cnt;sum[x]+=1; if(l==r) return ; int m=(l+r)>>1; if(k<=m) build(k,l,m,tl[x]); else build(k,m+1,r,tr[x]);}int query(int k,int l,int r,int x){ if(l==r) return l; int m=(l+r)>>1; if(sum[tl[x]]>=k) return query(k,l,m,tl[x]); return query(k-sum[tl[x]],m+1,r,tr[x]);}int merge(int x,int y){ if(!x||!y) return x+y; sum[x]+=sum[y]; tl[x]=merge(tl[x],tl[y]); tr[x]=merge(tr[x],tr[y]); return x;}void work(){ int x,y;char opt[3]; while(m--){ scanf("%s%d%d",opt,&x,&y); if(opt[0]=='Q'){ int p=fid(x); if(sum[root[p]]<y){puts("-1");continue;} int t=query(y,1,n,root[p]); printf("%d\n",id[t]); } if(opt[0]=='B'){ int p=fid(x),q=fid(y); if(p!=q) f[p]=q,root[q]=merge(root[p],root[q]); } }}void init(){ cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d",&a[i]),id[a[i]]=i,f[i]=i; int x,y; for(int i=1;i<=m;i++){ scanf("%d%d",&x,&y); int p=fid(x),q=fid(y); f[p]=q; } for(int i=1;i<=n;i++) build(a[i],1,n,root[fid(i)]); cin>>m;}int main(){ init(); work(); return 0;}
阅读全文
0 0
- 2733: [HNOI2012]永无乡
- [BZOJ 2733][HNOI2012]永无乡
- bzoj 2733: [HNOI2012]永无乡
- bzoj 2733: [HNOI2012]永无乡
- 2733: [HNOI2012]永无乡
- 【BZOJ 2733】 [HNOI2012]永无乡
- BZOJ 2733: [HNOI2012]永无乡
- bzoj 2733 [HNOI2012]永无乡
- bzoj 2733 [HNOI2012]永无乡
- 2733: [HNOI2012]永无乡
- bzoj 2733 [HNOI2012]永无乡
- BZOJ 2733 [HNOI2012] 永无乡 Treap
- 【HNOI2012】 永无乡
- HNOI2012永无乡
- [HNOI2012]永无乡
- HNOI2012永无乡
- BZOJ 2733 HNOI2012 永无乡 Treap+启发式合并
- 【BZOJ 2733】 [HNOI2012]永无乡|Splay启发式合并
- unreachable statement
- Java垃圾回收机制
- vue2.0中如何调用腾讯地图api?
- 根据网络接口名获取IP地址
- 5.DNS劫持原理
- 2733: [HNOI2012]永无乡
- weex slider 实现滑动底部导航功能
- 动态代理的理解
- DOM节点层次(Document类型)
- 抢券淘隐私政策
- 搜狐发奖金
- CSDN博客积分规则博客等级博客专家专栏
- Java内存区域与内存溢出异常
- 全排列算法以及求下一组全排列