用并查集维护联通性。对每个联通块维护一个平衡树。合并时启发式合并。比较懒,用了pb_ds。

  1. #include<cstdio>
  2. #include<ext/pb_ds/assoc_container.hpp>
  3. #include<ext/pb_ds/tree_policy.hpp>
  4. using namespace std;
  5. using namespace __gnu_cxx;
  6. using namespace __gnu_pbds;
  7. tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> T[];
  8. tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>::iterator it;
  9. int num[],val[],fa[],rank[];
  10. int n,m,q,x,y,f1,f2;
  11. char op[];
  12. int Res,Num;char C,CH[];
  13. inline int G()
  14. {
  15. Res=;C='*';
  16. while(C<''||C>'')C=getchar();
  17. while(C>=''&&C<=''){Res=Res*+(C-'');C=getchar();}
  18. return Res;
  19. }
  20. inline void P(int x)
  21. {
  22. Num=;while(x>)CH[++Num]=x%,x/=;
  23. while(Num)putchar(CH[Num--]+);
  24. putchar('\n');
  25. }
  26. void init()
  27. {
  28. for(int i=;i<=n;i++)
  29. fa[i]=i;
  30. }
  31. int findroot(int x)
  32. {
  33. if(fa[x]==x)
  34. return x;
  35. int rt=findroot(fa[x]);
  36. fa[x]=rt;
  37. return rt;
  38. }
  39. void Union(const int &u,const int &v)
  40. {
  41. if(rank[u]<rank[v])
  42. {
  43. fa[u]=v;
  44. for(it=T[u].begin();it!=T[u].end();it++)
  45. T[v].insert((*it));
  46. T[u].clear();
  47. }
  48. else
  49. {
  50. fa[v]=u;
  51. for(it=T[v].begin();it!=T[v].end();it++)
  52. T[u].insert((*it));
  53. T[v].clear();
  54. if(rank[u]==rank[v]) rank[u]++;
  55. }
  56. }
  57. int main()
  58. {
  59. n=G();m=G();
  60. init();
  61. for(int i=;i<=n;i++)
  62. {
  63. val[i]=G();
  64. T[i].insert(val[i]);
  65. num[val[i]]=i;
  66. }
  67. for(int i=;i<=m;i++)
  68. {
  69. x=G();y=G();
  70. f1=findroot(x),f2=findroot(y);
  71. if(f1!=f2) Union(f1,f2);
  72. }
  73. q=G();
  74. for(int i=;i<=q;i++)
  75. {
  76. scanf("%s",op);x=G();y=G();
  77. if(op[]=='Q')
  78. {
  79. f1=findroot(x);
  80. if(T[f1].size()<y) puts("-1");
  81. else P(num[*T[f1].find_by_order(y-)]);
  82. }
  83. else
  84. {
  85. f1=findroot(x),f2=findroot(y);
  86. if(f1!=f2) Union(f1,f2);
  87. }
  88. }
  89. return ;
  90. }

【pb_ds】【平衡树启发式合并】【并查集】bzoj2733 [HNOI2012]永无乡的更多相关文章

  1. bzoj2733: [HNOI2012]永无乡 启发式合并

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2733 题目: 2733: [HNOI2012]永无乡 Time Limit: 10 Sec   ...

  2. [Bzoj2733][Hnoi2012] 永无乡(BST)(Pb_ds tree)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4108  Solved: 2195[Submit][Statu ...

  3. bzoj2733: [HNOI2012]永无乡(splay)

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3778  Solved: 2020 Description 永 ...

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

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

  5. [BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)

    传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳 ...

  6. [BZOJ2733] [HNOI2012] 永无乡 (splay启发式合并)

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

  7. BZOJ2733 [HNOI2012]永无乡 【线段树合并】

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. [bzoj2733][HNOI2012]永无乡_权值线段树_线段树合并

    永无乡 bzoj-2733 HNOI-2012 题目大意:题目链接. 注释:略. 想法: 它的查询操作非常友善,就是一个联通块内的$k$小值. 故此我们可以考虑每个联通块建一棵权值线段树. 这样的话每 ...

  9. BZOJ2733: [HNOI2012]永无乡(线段树合并)

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

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

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

随机推荐

  1. HDU 1203 01背包

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. POJ3349 Snowflake Snow Snowflakes (hash

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 48624   Accep ...

  3. 修改centos的源

    最近都在使用国内的VPS.系统统一使用的都是Linux系统.但是,有一些服务商的系统给默认设置的是国外的.这样就会导致下载速度缓慢.于是,找到了国内几家比较热门的镜像点.奉献给大家.下面的镜像全部支持 ...

  4. [05]Git查看、删除、重命名远程分支和tag

    Git查看.删除.重命名远程分支和tag 2015-06-15:加入姊妹篇: 2013-11-06:加入重命名远程分支的内容: 2013-01-09:加入删除远程tag的内容. 姊妹篇:使用Git.G ...

  5. 【Mysql优化】MySQL Profiling 的使用

    要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...

  6. 大话Linux内核中锁机制之原子操作、自旋锁【转】

    转自:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实 ...

  7. Launcher3自定义壁纸旋转后拉伸无法恢复

    MTK8382/8121平台. 描述:将自定义图片设置成壁纸后,横屏显示时,旋转为竖屏,图片由于分辨率过小,会拉伸:再旋转为横屏,拉伸不恢复. 这两天正在解这个问题,研究了很久,走了不少弯路,最后发现 ...

  8. postman发送post请求,报405 Method Not Allowed

    postman发送post请求,报405 Method Not Allowed: 亲测有效的方案一: 检查请求header是否缺少必要信息.如果不清可以把所有的头部信息全部粘贴到header中,尝试是 ...

  9. phpstorm+xdebug详解

    1.run->edit configurations StartUrl最好是网址,不然容易出错,Server选择的是配置时添加的Servers,详可参考:http://www.cnblogs.c ...

  10. mybatis generator 生成带中文注释的model类

    将org.mybatis.generator.interal.DefaultCommentGenerator类的addFieldComment方法重写,代码如下: public void addFie ...