博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JZOJ4811】【NOIP2016提高A组五校联考1】排队
阅读量:5158 次
发布时间:2019-06-13

本文共 1728 字,大约阅读时间需要 5 分钟。

题目描述

这里写图片描述

输入

这里写图片描述

输出

这里写图片描述

样例输入

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,如果indexsum>0,则index合法。

操作2

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


时间复杂度为O(nlogn2)

代码

#include
#include
#include
#include
#include
#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
=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

转载于:https://www.cnblogs.com/hiweibolu/p/6714878.html

你可能感兴趣的文章
C++ STL stack、queue和vector的使用
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
有关快速幂取模
查看>>