当前位置: 首页 > 编程日记 > 正文

BZOJ4551: [Tjoi2016Heoi2016]树

BZOJ4551: [Tjoi2016&Heoi2016]树

Description

在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:
1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。)
2. 询问操作:询问某个结点最近的一个打了标记的祖先(这个结点本身也算自己的祖先)
你能帮帮他吗?

Input

输入第一行两个正整数N和Q分别表示节点个数和操作次数
接下来N-1行,每行两个正整数u,v(1≤u,v≤n)表示u到v有一条有向边
接下来Q行,形如“opernum”oper为“C”时表示这是一个标记操作,oper为“Q”时表示这是一个询问操作
对于每次询问操作,1 ≤ N, Q ≤ 100000。

Output

输出一个正整数,表示结果

Sample Input

5 5
1 2
1 3
2 4
2 5
Q 2
C 2
Q 2
Q 5
Q 3

Sample Output

1
2
2
1
题解Here!
树链剖分。
打上标记就是修改为剖分后的节点标号。
询问就是求最大值。
附代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#define LSON rt<<1
#define RSON rt<<1|1
#define DATA(x) b[x].data
#define LSIDE(x) b[x].l
#define RSIDE(x) b[x].r
#define MAXN 100010
using namespace std;
int n,m,c=1,d=1;
int head[MAXN],deep[MAXN],size[MAXN],son[MAXN],fa[MAXN],top[MAXN],id[MAXN],nid[MAXN];
struct node1{int next,to;
}a[MAXN<<1];
struct node2{int data,l,r;
}b[MAXN<<2];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
inline void add(int x,int y){a[c].to=y;a[c].next=head[x];head[x]=c++;a[c].to=x;a[c].next=head[y];head[y]=c++;
}
void dfs1(int rt){son[rt]=0;size[rt]=1;for(int i=head[rt];i;i=a[i].next){int will=a[i].to;if(!deep[will]){deep[will]=deep[rt]+1;fa[will]=rt;dfs1(will);size[rt]+=size[will];if(size[son[rt]]<size[will])son[rt]=will;}}
}
void dfs2(int rt,int f){nid[d]=rt;id[rt]=d++;top[rt]=f;if(son[rt])dfs2(son[rt],f);for(int i=head[rt];i;i=a[i].next){int will=a[i].to;if(will!=fa[rt]&&will!=son[rt])dfs2(will,will);}
}
inline void pushup(int rt){DATA(rt)=max(DATA(LSON),DATA(RSON));
}
void buildtree(int l,int r,int rt){int mid;LSIDE(rt)=l;RSIDE(rt)=r;if(l==r){DATA(rt)=0;return;}mid=l+r>>1;buildtree(l,mid,LSON);buildtree(mid+1,r,RSON);pushup(rt);
}
void update(int l,int r,int rt){int mid;if(l<=LSIDE(rt)&&RSIDE(rt)<=r){DATA(rt)=l;return;}mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)update(l,r,LSON);if(mid<r)update(l,r,RSON);pushup(rt);
}
int query(int l,int r,int rt){int mid,ans=0;if(l<=LSIDE(rt)&&RSIDE(rt)<=r)return DATA(rt);mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)ans=max(ans,query(l,r,LSON));if(mid<r)ans=max(ans,query(l,r,RSON));return ans;
}
void work1(int x,int y){int s=0;while(top[x]!=top[y]){if(deep[top[x]]<deep[top[y]])swap(x,y);s=max(s,query(id[top[x]],id[x],1));x=fa[top[x]];}if(deep[x]>deep[y])swap(x,y);s=max(s,query(id[x],id[y],1));printf("%d\n",nid[s]);return;
}
void work(){char ch[2];int x;while(m--){scanf("%s",ch);x=read();if(ch[0]=='C')update(id[x],id[x],1);if(ch[0]=='Q')work1(1,x);}
}
void init(){int x,y;n=read();m=read();for(int i=1;i<n;i++){x=read();y=read();add(x,y);}deep[1]=1;dfs1(1);dfs2(1,1);buildtree(1,n,1);update(id[1],id[1],1);
}
int main(){init();work();return 0;
}

转载于:https://www.cnblogs.com/Yangrui-Blog/p/9043403.html

相关文章:

电力系统稳定与控制_基于数据驱动的电力系统稳定性分析

上期内容&#xff1a;世界电网大停电的经验和稳定控制的发展高薪诚聘电气工程教师、博士后近期学术会议公告&#xff0c;欢迎参会详情请按下方导引查阅&#xff0c;戳&#xff01;戳&#xff01;戳&#xff01;特别致谢报告专家徐 岩 助理教授专家介绍Dr Yan Xu received th…

git-- 使用

git 使用时两个人冲突: Resolve conflicts 转载于:https://www.cnblogs.com/mafeng/p/5980075.html

以太坊RLP编码规则

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链中以太坊RLP编码规则! RLP(Recursive Length Prefix&#xff0c;递归长度前缀)编码算法&#xff0c;是以太坊中数据序列化/反序列化的主要方法…

openjudge-NOI 2.6基本算法之动态规划 专题题解目录

1、1759 最长上升子序列 2、1768 最大子矩阵 3、1775 采药 4、1808 公共子序列 5、1944 吃糖果 6、1996 登山 7、2000 最长公共子上升序列 8、2718 移动路线 9、2728 摘花生 10、2985 数字组合 11、2988 计算字符串距离 转载于:https://www.cnblogs.com/xqmmcqs/p/5979056.html…

js query复习

jquery:js框架; 主要区别在dom的操作 jq需要引入文件并且引入顺序在最上面; 找元素 操作元素 js:doucument.getElementById..classname,tagname,name jq:$(选择器) dom是js对象 jqDom是jquery对象 操作内容 js:dom.innerHTML(非表单元素) dom.value(表单元素) jq:jqDom.html(…

python 进程池 freeze_support_Python 多进程并发操作中进程池Pool的实例

在利用Python进行系统管理的时候&#xff0c;特别是同时操作多个文件目录&#xff0c;或者远程控制多台主机&#xff0c;并行操作可以节约大量的时间。当被操作对象数目不大时&#xff0c;可以直接利用multiprocessing中的Process动态成生多个进程&#xff0c;10几个还好&#…

区块链技术如何改变我们对DNA的看法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 试想一下&#xff0c;有人得到了你的一些最私人的信息&#xff0c;并用它来攻击你&#xff0c;窃取你的身份&#xff0c;实施诈骗。这对于你来说特别…

input样式和修改

$(.input_class).on(focus,function(event){ if(event.keyCode 13){goSearch()}});input::-webkit-input-placeholder {color:#999; } .input_class{color:#333;border:none;vertical-align: .08rem;background: #F5F5F5;font-size:.65rem; } 转载于:https://www.cnblogs.com/…

python uwsgi_python Web开发你要理解的WSGI uwsgi详解

WSGI协议首先弄清下面几个概念&#xff1a;WSGI&#xff1a;全称是Web Server Gateway Interface&#xff0c;WSGI不是服务器&#xff0c;python模块&#xff0c;框架&#xff0c;API或者任何软件&#xff0c;只是一种规范&#xff0c;描述web server如何与web application通信…

接口设计文档_app端接口用例设计方法和测试方法(一)

前言接口测试作为测试的重要一环&#xff0c;重点关注的是数据层面的输入输出&#xff0c;今天小编介绍一种常用的接口测试用例设计方法和测试方法&#xff0c;希望对大家有所帮助&#xff0c;由于内容较多&#xff0c;分三次给大家讲解&#xff0c;今天先介绍“请求层面的用例…

一个在raw里面放着数据库文件的网上例子

https://www.cnblogs.com/yutingliuyl/p/6880103.html转载于:https://www.cnblogs.com/strongdady/p/9052046.html

as3绕过策略文件给视频截图

接上篇 http://www.cnblogs.com/DarkMaster/p/5973593.html 这篇同样是在老外博客上找到的&#xff0c;分享给大家&#xff0c;再次感叹老外牛逼啊。 原文地址&#xff1a;http://gamespoweredby.com/blog/2014/11/netstream-playnull-bitmapdata-workaround/ 老规矩直接上关键…

数据库和区块链的异同

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 前几日有好友询问我关于数据库和区块链的异同&#xff0c;我觉得这个问题非常好&#xff0c;今天刚好有空把当时的聊天情况回忆了一下&#xff0c;可…

java并发编程实战:第十六章----Java内存模型

一、什么是内存模型&#xff0c;为什么要使用它 如果缺少同步&#xff0c;那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中编译器中生成的指令顺序&#xff0c;可以与源代码中的顺序不同处理器采用乱序或并行的方…

子div超出父div_菜鸟学 react props 子到父

我们都知道在 vue 中可以使用事件将子组件的数据传递给父组件&#xff0c;也可以通过拿到父组件的实例直接调用父组件的方法先来个子组件class ChildCom extends React.Component {constructor(props) {super(props)this.state {msg: 这是子元素的数据 hello ChildCom}}sendCh…

Linux笔记:使用Vim编辑器

Vi编辑器是Unix系统上早先的编辑器&#xff0c;在GNU项目将Vi编辑器移植到开源世界时&#xff0c;他们决定对其作一些改进。 于它不再是以前Unix中的那个原始的Vi编辑器了&#xff0c;开发人员也就将它重命名为Vi improved&#xff0c;或Vim。 为了方便使用&#xff0c;几乎所有…

实现中心钱包系统

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 很多业务上去中心化的应用上&#xff0c;需要很多中心化的管理&#xff0c;例如交易所&#xff0c;每秒交易量非常大&#xff0c;这都是 比特币&…

南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题

问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图&#xff0c;找到所有的割点和桥输入 第一行&#xff1a;点的个数&#xff0c;如果点个数是n&#xff0c;他们的编号为0 ~ n-1 余下的行&#xff1a;每行…

小程序生命周期_来,简单说说小程序的生命周期?

简单说说小程序的生命周期?在小程序中生命周期分为三大类应用生命周期页面生命周期组件生命周期应用生命周期onLaunch(){ console.log(onLaunch监听小程序初始化);}onShow(){ console.log(onShow监听小程序显示);}onHide() { console.log(onLaunch监听小程序隐藏);}页面生命周…

模板引擎:VelocityFreeMarker(转)

Velocity&#xff0c;名称字面翻译为&#xff1a;速度、速率、迅速&#xff0c;用在Web开发里&#xff0c;用过的人可能不多&#xff0c;大都基本知道和在使用Struts&#xff0c;到底Velocity和Struts(Taglib和Tiles)是如何联系&#xff1f;在技术上Velocity要比Struts Struts(…

去中心化的尺度

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 摘要&#xff1a;有些人因为其底层技术而对区块链感兴趣&#xff0c; 另外一些人对它的商业可能性着迷&#xff0c; 还有一些人关心它的社会和政治影…

在tomcat中用jndi配置数据源启动java web程序

1.在web.xml中添加: <resource-ref> <res-ref-name>jdbc/MTSDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> 2.在tomcat的context.xml中配置数据源:…

centOS7.4服务器 yum安装 搭建lamp环境

// 红色加粗是linux命令安装gcc和gcc-cyum -y install gcc gcc-cyum list httpd*安装apcheyum -y install httpd.x86_64 httpd-devel.x86_64 httpd-tools.x86_64开启服务/bin/systemctl start httpd.service停止服务/bin/systemctl stop httpd.service设置Apache服务开机启动sy…

好想学python怎么猜人_学手艺我好想学个手艺哦可是脑子怎么想也想 – 手机爱问...

2009-03-25学点东西学什么好呢&#xff1f;我今年快40了建议&#xff1a;你以前一直当销售&#xff0c;销售这个职业最大的特点就是说、说、说&#xff0c;跟人打交道最多。那么&#xff1a;(1)如果你厌倦了跟人打交道&#xff0c;厌烦了每天不停跟陌生人说说说的&#xff0c;建…

用Python从零开始创建区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 前言 如果你还没有听说过 3 点钟区块链群&#xff0c;说明你还不是链圈的人&#xff1b;如果你还没有加入 3 点钟区块链群&#xff0c;说明你还不是…

动态添加跨行表格_学会这2招,轻松搞定数据透视表动态更新,效率猛增一倍...

私信回复关键词【福利】&#xff0c;获取丰富办公资源&#xff0c;助你高效办公早下班&#xff01;Hello&#xff0c;大家好&#xff0c;我是最近在研究数据透视表的小爽~最近&#xff0c;我收到了一个学员的求助&#xff1a;简单归纳一下&#xff0c;这个问题就是&#xff1a;…

alpha阶段个人总结(201521123031林庭亦)

一、个人总结 第一部分&#xff1a;硬的问题 第二部分&#xff1a;软的问题&#xff0c;在成长路上学到了什么&#xff1f; 1 当你看到不靠谱的设计、糟糕的代码、过时的文档和测试用例的时候&#xff0c;不要想 “既然别人的代码已经这样了&#xff0c;我的代码也可以随便一点…

python统计列表内元素个数

代码如下&#xff1a; list01 [a,b,c,a,c] set01 set(list01)print(set01)dict01 {}for item in set01:dict01.update({item:list01.count(item)}) print(dict01)结果&#xff1a; c, b, a} {c: 2, b: 1, a: 2}转载于:https://www.cnblogs.com/zhangyux/p/5999109.html

比特币的货币属性是什么?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 作为比特币被设计之初的用意就是作为交易的一种支付手段。作为全新的货币形式&#xff0c;比特币本身的性质就是其去中心化的特性能够和传统的货币很…

病虫害模型算法_基于深度学习的目标检测算法综述

sigai 基于深度学习的目标检测算法综述导言目标检测的任务是找出图像中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c;确定它们的位置和大小&#xff0c;是机器视觉领域的核心问题之一。由于各类物体有不同的外观&#xff0c;形状&#xff0c;姿态&#xff0c;加上…