BZOJ4551 HEOI2016树
2024-09-24 11:06:44
可以用并查集,记忆化搜索,线段树多种方法实现。
我这里写的是依照dfs序建线段树,维护区间最大值。
#include<bits/stdc++.h>
using namespace std;
const int N=;
int head[N],lz[N<<],t[N<<],id[N],end[N],cnt,idx,pos[N];
struct node
{
int to,nex;
}e[N<<];
void add(int x,int y)
{
e[++cnt].to=y;e[cnt].nex=head[x];head[x]=cnt;
}
void dfs(int x,int fa)
{
id[x]=++idx;pos[idx]=x;
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(y==fa)continue;
dfs(y,x);
}
end[x]=idx;
}
void pushdown(int x)
{
if(lz[x])
{
t[x<<]=max(t[x<<],lz[x]);
t[x<<|]=max(t[x<<|],lz[x]);
lz[x<<]=max(lz[x],lz[x<<]);
lz[x<<|]=max(lz[x],lz[x<<|]);
lz[x]=;
}
}
void update(int p,int l,int r,int L,int R,int w)
{
if(l==L&&r==R)
{
t[p]=max(t[p],w);lz[p]=max(lz[p],w);return;
}
int mid=l+r>>;pushdown(p);
if(R<=mid)update(p<<,l,mid,L,R,w);
else if(L>mid)update(p<<|,mid+,r,L,R,w);
else update(p<<,l,mid,L,mid,w),update(p<<|,mid+,r,mid+,R,w);
}
int query(int p,int l,int r,int pos)
{
if(l==r)return t[p];
int mid=l+r>>;pushdown(p);
if(pos<=mid)return query(p<<,l,mid,pos);
else if(pos>mid)return query(p<<|,mid+,r,pos);
}
int main()
{
//freopen("tree.in","r",stdin);
//freopen("tree.out","w",stdout);
int n,q;scanf("%d%d",&n,&q);
for(int i=;i<n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(,);
update(,,n,id[],end[],);
for(int i=;i<=q;++i)
{
char s[];int x;scanf("%s",s);scanf("%d",&x);
if(s[]=='C')
{
update(,,n,id[x],end[x],id[x]);
}
else
{
printf("%d\n",pos[query(,,n,id[x])]);
}
}
return ;
}
最新文章
- ASP.NET知识总结(3.HTTP协议详解)
- STM32中断管理函数
- Navi.Soft30.产品.DataWindowNet.操作手册
- Android:Activity的跳转
- thrift总结
- 需要插入子集的时候如何更新父级ID
- 解决IE6,IE7不能隐藏绝对定位溢出的内容
- 数学(莫比乌斯函数):BZOJ 2440 完全平方数
- 用maven创建工程
- Mego(07) - 关系配置
- MVC |分部视图 PartialView()
- tarjan算法(求强连通子块,缩点)
- 自己写的保证js顺序加载的方法
- 内存管理cpuset,mempolicy[原理]
- 2-1 编写HelloWorld
- python学习 面向对象高级编程
- JavaScript基础(2)-DOM
- Python面向对象:继承和多态
- postman--安装及Interceptor插件
- Git 工具的使用,windows平台安装
热门文章
- 编程笔记:JavaScript 中的类型检查
- 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂
- java学习笔记记录
- python初步学习-面向对象之类(一)
- 常用的css3新特性总结
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
- memcached安装【转】
- pip安装使用详解【转】
- “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
- PHP安全编程:register_globals的安全性