[HZOI 2016]tree—增强版

注意事项

为了体现增强版,题目限制和数据范围有所增强:

时间限制:1.5s

内存限制:128MB

对于15% 的数据,1<=N,Q<=1000.

对于35% 的数据,1<=N,Q<=10000.

对于50% 的数据,1<=N,Q<=100000,且数据均为官方数据.

对于100% 的数据,1<=N,Q<=1000000.

请注意常数因子对于程序运行的影响。

解题报告

原题数据水到不行= =

直接找父节点都能上榜= =

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
inline int read(){
int sum();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
struct edge{
int e;
edge *n;
edge():e(),n(NULL){}
}a[],*pre[];
int tot;
inline void insert(int s,int e){
a[++tot].e=e;
a[tot].n=pre[s];
pre[s]=&a[tot];
}
int n,q;
char op[];
bool bj[];
int fa[];
inline void dfs(int u){
for(edge *i=pre[u];i;i=i->n){
int e(i->e);
if(e!=fa[u]){
fa[e]=u;
dfs(e);
}
}
}
inline int query(int u){
while(!bj[u])
u=fa[u];
return u;
}
inline int gg(){
freopen("heoi2016_tree.in","r",stdin);
freopen("heoi2016_tree.out","w",stdout);
memset(pre,NULL,sizeof(pre));
n=read(),q=read();
bj[]=;
for(int i=;i<n;++i){
int x(read()),y(read());
insert(x,y),insert(y,x);
}
dfs();
while(q--){
scanf("%s",op);
int x(read());
if(op[]=='Q')
printf("%d\n",query(x));
else
bj[x]=;
}
return ;
}
int K(gg());
int main(){;}

然而加强版数据真的不是闹着玩的= =

首先我们看,它是一个不断往上爬,直到爬到第一个有标记的点或者是根节点时才停止的过程,那么我们很容易想到树剖,从当前节点往上爬就好了

同时我们注意到,题目要求找离当前节点最近的被标记的祖先,所以我们只要去找深度最深的被标记的祖先即可,而由树链剖分中$dfs$序的性质可知,在同一条链上越深的节点,它的时间戳就越大,那么我们显然可以维护一颗最大值的线段树,假如该点被标记,就把它的时间戳加入线段树

剩下的就很好实现了

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
inline int read(){
int sum=;
char ch=getchar();
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
struct edge{
int e,n;
}a[];
int pre[];
int tot;
inline void insert(int s,int e){
a[++tot].e=e;
a[tot].n=pre[s];
pre[s]=tot;
}
int dep[],fa[],son[],size[];
inline void dfs1(int u){
size[u]=,son[u]=;
for(int i=pre[u];i!=-;i=a[i].n){
int e=a[i].e;
if(e!=fa[u]){
fa[e]=u;
dep[e]=dep[u]+;
dfs1(e);
size[u]+=size[e];
if(size[e]>size[son[u]])
son[u]=e;
}
}
}
int cnt;
int top[],id[],pos[];
inline void dfs2(int u,int rt){
top[u]=rt;
id[u]=++cnt;
pos[cnt]=u;
if(son[u])
dfs2(son[u],rt);
else
return;
for(int i=pre[u];i!=-;i=a[i].n){
int e=a[i].e;
if(e!=fa[u]&&e!=son[u])
dfs2(e,e);
}
}
int mx[];
inline void pushup(int i){
mx[i]=max(mx[i<<],mx[i<<|]);
}
inline void update(int pos,int l,int r,int i){
if(l==r){
mx[i]=pos;
return;
}
int mid=l+r>>;
if(pos<=mid)
update(pos,l,mid,i<<);
else
update(pos,mid+,r,i<<|);
pushup(i);
}
inline int query(int ll,int rr,int l,int r,int i){
if(ll<=l&&r<=rr)
return mx[i];
int mid=l+r>>,ret=;
if(ll<=mid)
ret=max(query(ll,rr,l,mid,i<<),ret);
if(mid<rr)
ret=max(query(ll,rr,mid+,r,i<<|),ret);
return ret;
}
int n,q;
char op[];
inline int ask(int x){
int ret();
while(x){
int tmp=query(id[top[x]],id[x],,n,);
if(tmp)
ret=dep[ret]>dep[pos[tmp]]?ret:pos[tmp];
x=fa[top[x]];
}
return ret;
}
int main(){
int __size__ = << ;
char *__p__ = (char*)malloc(__size__) + __size__;
__asm__("movl %0, %%esp\n" :: "r"(__p__));
freopen("tree++.in","r",stdin);
freopen("tree++.out","w",stdout);
memset(pre,-,sizeof(pre));
n=read(),q=read();
for(int i=;i<n;++i){
int x=read(),y=read();
insert(x,y);
}
dfs1();
dfs2(,);
int x;
update(id[],,n,);
for(int i=;i<q;++i){
scanf("%s",op);
x=read();
if(op[]=='Q')
printf("%d\n",ask(x));
else
update(id[x],,n,);
}
return ;
}

[HZOI 2016]tree—增强版的更多相关文章

  1. office 2016 专业增强版 和 visio 2016 专业版 下载安装(附带激活工

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://babyshen.blog.51cto.com/8405584/1697910 o ...

  2. [系统相关]WPS Office 2016 专业增强版 10.8.0.6470 免序列号无限制

    WPS Office (10.8.0.6470)  新增功能列表 ============================================= 改进功能列表 ------------ W ...

  3. 【办公】Microsoft Office 2016 专业增强版下载及永久激活-亲测分享

    Win7 x64,安装 Office 2016. 1. 下载 Office 2016,用迅雷网上下载飞快.(这里分享我的下载链接,2.39G用迅雷分分钟就下好了) 2. 按 此博客 ,安装激活工具. ...

  4. 微软发布 Windows Server 2016 预览版第三版,开发者要重点关注Nano Server

    微软已经发布 Windows Server 2016 和 System Center 2016 第三个技术预览版,已经提供下载.Windows Server 2016 技术预览版第三版也是首个包括了容 ...

  5. 最新GHOST XP系统下载旗舰增强版 V2016年

    系统来自:系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年3月 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插 ...

  6. 最新深度技术GHOST XP系统旗舰增强版 V2016年

    来自系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插件,增强浏 ...

  7. WinNTSetup v3.8.7 正式版绿色增强版

    最强系统安装利器:WinNTSetup 现已更新至 v3.8.7 正式版!这次更新修复调整了诸多问题,新版非常好用接近完美!WinNTSetup 现在已经自带BCDBoot 选项,并且完全支持Wind ...

  8. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

  9. zw版_zw中文增强版Halcon官方Delphi例程

    [<zw版·delphi与halcon系列原创教程>zw版_zw中文增强版Halcon官方Delphi例程 源码下载:http://files.cnblogs.com/files/ziwa ...

随机推荐

  1. Linux进程状态解析

    引言 Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的R.S.D.T.Z.X 六种状态做个说明. PROCE ...

  2. PCB 使用第3方网站做为外链图片资源

    计划将Web版SI9000阻抗计算工具放外网了,由于个人网站带宽太小原因, 准备将静态的图片资源放在第三方网站,今天找了好几个图床网站,把阻抗模型图上传到图床网站,这样一来就能解决带宽的问题了,今天折 ...

  3. 关于swoole 和golang 的压力测试结果

    一.环境介绍 linux centos7 php7.1.18 go1.12.1 2核4G内存 二.代码 swoole代码 <?php $http = new swoole_http_server ...

  4. ORA-01012:not logged on的解决办法

    conn / as sysdba 报错ORA-01012: not logged on 发生原因:关闭数据库是shutdown 后面没有接关闭参数中的任何一个. nomal ————- —-所有连接都 ...

  5. [转]mysql视图学习总结

    转自:http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html 一.使用视图的理由是什么?1.安全性.一般是这样做的:创建一个 ...

  6. Recyclerview点击事件,更新item的UI+更新Recyclerview外的控件

    项目中用到了Recyclerview,在第一行代码中学到了一种相对来说简单的点击事件方法,可是这种点击事件是在adapter中写的,没有教怎么更新item的ui和更新Recyclerview之外的控件 ...

  7. servlet的多线程并发问题

    package gz.itcast.e_thread; import java.io.IOException; import javax.servlet.ServletException; impor ...

  8. WCF开发的流程-服务端和客户端之间的通讯(内含demo讲解)

    讲解技术之前,恳请博友让我说几句废话.今天是我第一在博客园发布属于自己原创的博文(如有雷同,那是绝对不可能的事,嘿嘿).之前一直是拜读各位博友的大作,受益匪浅的我在这对博友们说声谢谢,谢谢你们的共享! ...

  9. HashMap中capacity、loadFactor、threshold、size等概念的解释

    约定 约定前面的数组结构的每一个格格称为桶 约定桶后面存放的每一个数据称为bin bin这个术语来自于JDK 1.8的HashMap注释. size size表示HashMap中存放KV的数量(为链表 ...

  10. Replacing Threads with Dispatch Queues

    Replacing Threads with Dispatch Queues To understand how you might replace threads with dispatch que ...