题目描述

输入

输出

样例输入

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)。

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) int(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="aP3.in";
const char* fout="aP3.out";
const int inf=0x7fffffff;
const int maxn=100007,maxm=maxn*2,maxk=20;
int n,m,i,j,k,tot,ans;
int fi[maxm],la[maxm],ne[maxm];
int a[maxn],de[maxn],fa[maxn][maxk];
int b[maxn],c[maxn],dfn[maxn],st[maxn],en[maxn];
int ta[maxn];
void change(int v,int v1){
for (;v<=n;v+=v&-v) ta[v]+=v1;
}
int presum(int v){
int v1=0;
for (;v;v-=v&-v) v1+=ta[v];
return v1;
}
int getsum(int l,int r){
return presum(r)-presum(l-1);
}
void add_line(int a,int b){
tot++;
ne[tot]=fi[a];
la[tot]=b;
fi[a]=tot;
}
void build(int v,int from){
int i,j,k;
fa[v][0]=from;
de[v]=de[from]+1;
for (i=1,j=ln(de[v],2);i<=j;i++){
k=fa[v][i-1];
fa[v][i]=fa[k][i-1];
}
st[v]=b[0];
for (k=fi[v];k;k=ne[k])
if (la[k]!=from) b[++b[0]]=la[k];
en[v]=b[0];
if (en[v]-st[v]) sort(b+st[v]+1,b+en[v]+1);
for (i=st[v]+1;i<=en[v];i++) build(b[i],v);
c[++c[0]]=v;
dfn[v]=c[0];
}
int add(){
int l=1,r=n,mid;
while (l<r){
mid=(l+r)/2;
if (mid-presum(mid)) r=mid;
else l=mid+1;
}
a[c[l]]=1;
change(l,1);
return c[l];
}
int del(int v){
int i,j,k=v;
if (a[k]==0) return 0;
for (i=ln(de[v],2);i>=0;i--){
if (a[fa[k][i]]) k=fa[k][i];
}
if (a[fa[k][0]]) k=fa[k][0];
a[k]=0;
change(dfn[k],-1);
return de[v]-de[k];
}
int main(){
scanf("%d%d",&n,&m);
for (i=1;i<n;i++){
scanf("%d%d",&j,&k);
add_line(j,k);
add_line(k,j);
}
build(1,0);
for (i=1;i<=m;i++){
scanf("%d%d",&j,&k);
if (j==1){
for (;k;k--) ans=add();
}else{
ans=del(k);
}
printf("%d\n",ans);
}
return 0;
}

【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. HZOI20190722 B visit 组合数+CRT合并

    题目:https://www.cnblogs.com/Juve/articles/11226266.html solution: 30%:dp 设dp[k][i][j]表示经过k时间,在(i,j)的方 ...

  2. js算法之把一个数组按照指定的数组大小分割成若干个数组块

    题目描述:     把一个数组arr按照指定的数组大小size分割成若干个数组块. 例如:   chunk([1,2,3,4],2)=[[1,2],[3,4]];   chunk([1,2,3,4,5 ...

  3. https://github.com/ronggang/transmission-web-control

    首先需要保证你的电脑可以链接国际互联网 如果只能链接大型局域网,那么请您带着电脑出国以便于可以顺利安装https://github.com/ronggang/transmission-web-cont ...

  4. Python之通配符--提取文件中的内容并输出

    前言:我的学习进度其实没有那么快的,因为现在是网络工程师实习,只有晚上一点时间和周末有空,所以周一到周天的学习进度很慢,今天之所以突然跳到通配符是因为工作需要,大体讲一下我的工作需求:网络工程师就是写 ...

  5. SecondaryNameNode 理解

    NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits).当一个NameNode启动时,它首先从一个映像文件(fsimage)中读取HDFS的状态,接着应用日志文件中的e ...

  6. storm的安装

    一. 安装storm要先本机搭建好zookeeper集群(手动目录安装或者CDH安装) 二. Java 6 Python 2.6.6 unzip(针对使用语言要安装好相应环境 比如java 要JDK和 ...

  7. HYSBZ 1015/BZOJ1015 星球大战starwar

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  8. 跟我一起做一个vue的小项目(APPvue2.5完结篇)

    先放一下这个完结项目的整体效果 下面跟我我一起进行下面项目的进行吧~~~ 接下来我们进行的是实现header的渐隐渐显效果,并且点击返回要回到首页 我们先看效果 在处理详情页向下移动过程中,heade ...

  9. PHP学习1.5-预定义超全局数组变量

    1.PHP 预定义的超全局变量数组 特性: a.特殊的数组,操作方式没有区别 b.不用声明,php脚本中默认存在,因为在php中不用定义,所以在自定义变量是应避免和预定的全局变量同名 c.在全局范围内 ...

  10. TZ_06_SpringMVC_异常处理,自定义异常

    1.SpringMVC异常处理的方式 . 2. 异常处理思路 1>. Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServle ...