可以用并查集,记忆化搜索,线段树多种方法实现。

我这里写的是依照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 ;
}

最新文章

  1. ASP.NET知识总结(3.HTTP协议详解)
  2. STM32中断管理函数
  3. Navi.Soft30.产品.DataWindowNet.操作手册
  4. Android:Activity的跳转
  5. thrift总结
  6. 需要插入子集的时候如何更新父级ID
  7. 解决IE6,IE7不能隐藏绝对定位溢出的内容
  8. 数学(莫比乌斯函数):BZOJ 2440 完全平方数
  9. 用maven创建工程
  10. Mego(07) - 关系配置
  11. MVC |分部视图 PartialView()
  12. tarjan算法(求强连通子块,缩点)
  13. 自己写的保证js顺序加载的方法
  14. 内存管理cpuset,mempolicy[原理]
  15. 2-1 编写HelloWorld
  16. python学习 面向对象高级编程
  17. JavaScript基础(2)-DOM
  18. Python面向对象:继承和多态
  19. postman--安装及Interceptor插件
  20. Git 工具的使用,windows平台安装

热门文章

  1. 编程笔记:JavaScript 中的类型检查
  2. 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂
  3. java学习笔记记录
  4. python初步学习-面向对象之类(一)
  5. 常用的css3新特性总结
  6. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
  7. memcached安装【转】
  8. pip安装使用详解【转】
  9. “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
  10. PHP安全编程:register_globals的安全性