题目描述

输入

输出

样例输入

5 4

1 2

1 3

3 4

3 5

1 4

2 4

1 2

2 5

样例输出

3

1

1

2

数据范围

样例解释

解法

可推知原树可以转换为一个序列,即优先序列

一个01序列,当要往其中加入元素时,给第一个0加1即可。


操作1

等价于所谓优先序列加入元素。

实现:

二分第一个0的位置index;

使用数据结构得出[1,index]的和sum,如果index−sum>0,则index合法。

操作2

利用倍增得出最近的连续的有值祖先v,给v-1即可。


时间复杂度为O(nlogn2)。

代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<string.h>
  5. #include<algorithm>
  6. #define ll long long
  7. #define ln(x,y) int(log(x)/log(y))
  8. #define sqr(x) ((x)*(x))
  9. using namespace std;
  10. const char* fin="aP3.in";
  11. const char* fout="aP3.out";
  12. const int inf=0x7fffffff;
  13. const int maxn=100007,maxm=maxn*2,maxk=20;
  14. int n,m,i,j,k,tot,ans;
  15. int fi[maxm],la[maxm],ne[maxm];
  16. int a[maxn],de[maxn],fa[maxn][maxk];
  17. int b[maxn],c[maxn],dfn[maxn],st[maxn],en[maxn];
  18. int ta[maxn];
  19. void change(int v,int v1){
  20. for (;v<=n;v+=v&-v) ta[v]+=v1;
  21. }
  22. int presum(int v){
  23. int v1=0;
  24. for (;v;v-=v&-v) v1+=ta[v];
  25. return v1;
  26. }
  27. int getsum(int l,int r){
  28. return presum(r)-presum(l-1);
  29. }
  30. void add_line(int a,int b){
  31. tot++;
  32. ne[tot]=fi[a];
  33. la[tot]=b;
  34. fi[a]=tot;
  35. }
  36. void build(int v,int from){
  37. int i,j,k;
  38. fa[v][0]=from;
  39. de[v]=de[from]+1;
  40. for (i=1,j=ln(de[v],2);i<=j;i++){
  41. k=fa[v][i-1];
  42. fa[v][i]=fa[k][i-1];
  43. }
  44. st[v]=b[0];
  45. for (k=fi[v];k;k=ne[k])
  46. if (la[k]!=from) b[++b[0]]=la[k];
  47. en[v]=b[0];
  48. if (en[v]-st[v]) sort(b+st[v]+1,b+en[v]+1);
  49. for (i=st[v]+1;i<=en[v];i++) build(b[i],v);
  50. c[++c[0]]=v;
  51. dfn[v]=c[0];
  52. }
  53. int add(){
  54. int l=1,r=n,mid;
  55. while (l<r){
  56. mid=(l+r)/2;
  57. if (mid-presum(mid)) r=mid;
  58. else l=mid+1;
  59. }
  60. a[c[l]]=1;
  61. change(l,1);
  62. return c[l];
  63. }
  64. int del(int v){
  65. int i,j,k=v;
  66. if (a[k]==0) return 0;
  67. for (i=ln(de[v],2);i>=0;i--){
  68. if (a[fa[k][i]]) k=fa[k][i];
  69. }
  70. if (a[fa[k][0]]) k=fa[k][0];
  71. a[k]=0;
  72. change(dfn[k],-1);
  73. return de[v]-de[k];
  74. }
  75. int main(){
  76. scanf("%d%d",&n,&m);
  77. for (i=1;i<n;i++){
  78. scanf("%d%d",&j,&k);
  79. add_line(j,k);
  80. add_line(k,j);
  81. }
  82. build(1,0);
  83. for (i=1;i<=m;i++){
  84. scanf("%d%d",&j,&k);
  85. if (j==1){
  86. for (;k;k--) ans=add();
  87. }else{
  88. ans=del(k);
  89. }
  90. printf("%d\n",ans);
  91. }
  92. return 0;
  93. }

【JZOJ4811】【NOIP2016提高A组五校联考1】排队的更多相关文章

  1. NOIP2016提高A组五校联考4总结

    坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题, ...

  2. 【NOIP2016提高A组五校联考4】square

    题目 分析 首先,设\(f_{i,j}\)表示最大的以(i,j)为左下角的正方形的边长. 转移显然,\(f_{i,j}=\max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1})+1\ ...

  3. 【NOIP2016提高A组五校联考4】label

    题目 题目 20%算法 设\(f_{i,j}\)表示第i个节点选了j这个权值的方案数. 显然转移方程为,\[f_{i,j}=\Pi_{v=son(i)}(\sum_{k=1}^{j-k}f_{v,k} ...

  4. 【NOIP2016提高A组五校联考4】ksum

    题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r].[l,r+1]一定也被取了出来. 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子 ...

  5. NOIP2016提高A组五校联考3总结

    第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. ...

  6. 【NOIP2016提高A组五校联考2】tree

    题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的 ...

  7. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  8. 【NOIP2016提高A组五校联考2】string

    题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 ...

  9. NOIP2016提高A组五校联考2总结

    第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了, ...

随机推荐

  1. Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了

    阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版.Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架, ...

  2. CF集萃3

    CF1118F2 - Tree Cutting 题意:给你一棵树,每个点被染成了k种颜色之一或者没有颜色.你要切断恰k - 1条边使得不存在两个异色点在同一连通块内.求方案数. 解:对每颜色构建最小斯 ...

  3. day65作业

    有 红.黄.蓝 三个按钮,以及一个200x200矩形框box,点击不同的按钮,box的颜色会被切换为指定的颜色 <body> <div id="app"> ...

  4. opencv4 java投影

    工程下载 https://download.csdn.net/download/qq_16596909/11505994 比较适合与验证码的处理,毕竟八邻域降噪不能消除比较大的噪点,为了尽量减少噪点对 ...

  5. 【DM8168学习笔记4】ezsdk安装过程记录

    安装文件 ezsdk_dm816x-evm_5_05_02_00_setuplinux DM8168-EZSDK文件结构如图所示.               (图片来自:http://process ...

  6. NGINX模块开发 之 验证URL參数

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/RoyalApex/article/details/26404379 作者:邹祁峰 邮箱:Qifeng ...

  7. hive-hbase性能问题

    华为负责人本来想用这种表来做大数据开发,先前就听前辈讲过性能存在问题.实际开发过程确实存在不少问题.然后放弃换方案去做了. 1.底层meta映射字段问题.默认4000,如果再做修改会涉及到挺多源码. ...

  8. 微信小程序之组件的集合(二)

    继续微信小程序开发的学习,继续跟着老师的讲课思路来学习,继续开发项目中所用到的组件 一.导航栏navi组件的开发 1.新建组件的文件结构 这个就是先新建目录navi.然后在navi文件夹中新建comp ...

  9. springboot之jpa(简述)

    1.maven引入jar包(jpa和mysql) <dependency> <groupId>org.springframework.boot</groupId> ...

  10. stream的filter用法

    Person p1 = new Person("张三", new BigDecimal("23.0"));Person p2 = new Person(&quo ...