4551

思路:

  乱搞;

代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. #define maxn 100005
  7. #define maxm maxn<<1
  8. #define maxtree maxn<<2
  9. int n,head[maxn],E[maxm],V[maxm],cnt,m,deep[maxn],li[maxn],ri[maxn];
  10. int val[maxtree],L[maxtree],R[maxtree],mid[maxtree],key[maxtree],tmp1,tmp2;
  11. bool if_[maxtree];
  12. inline void in(int &now)
  13. {
  14. char Cget=getchar();now=;
  15. while(Cget>''||Cget<'') Cget=getchar();
  16. while(Cget>=''&&Cget<='')
  17. {
  18. now=now*+Cget-'';
  19. Cget=getchar();
  20. }
  21. }
  22. void dfs(int now,int fa)
  23. {
  24. deep[now]=deep[fa]+,li[now]=++cnt;
  25. for(int i=head[now];i;i=E[i])
  26. {
  27. if(V[i]==fa) continue;
  28. dfs(V[i],now);
  29. }
  30. ri[now]=cnt;
  31. }
  32. void build(int now,int l,int r)
  33. {
  34. L[now]=l,R[now]=r;
  35. if(l==r)
  36. {
  37. if_[now]=true,val[now]=,key[now]=;
  38. return;
  39. }
  40. mid[now]=l+r>>;
  41. build(now<<,l,mid[now]);
  42. build(now<<|,mid[now]+,r);
  43. }
  44. void change(int now,int l,int r,int va,int ke)
  45. {
  46. if(L[now]>=l&&R[now]<=r)
  47. {
  48. if(if_[now])
  49. {
  50. if(ke>key[now])key[now]=ke,val[now]=va;
  51. }
  52. else if_[now]=true,key[now]=ke,val[now]=va;
  53. return;
  54. }
  55. if(l<=mid[now]) change(now<<,l,r,va,ke);
  56. if(r>mid[now]) change(now<<|,l,r,va,ke);
  57. }
  58. void query(int now,int to)
  59. {
  60. if(if_[now]&&key[now]>tmp2) tmp1=val[now],tmp2=key[now];
  61. if(L[now]==R[now]) return;
  62. if(to<=mid[now]) query(now<<,to);
  63. else query(now<<|,to);
  64. }
  65. int main()
  66. {
  67. in(n),in(m);int u,v;
  68. for(int i=;i<n;i++)
  69. {
  70. in(u),in(v);
  71. E[++cnt]=head[u],V[cnt]=v,head[u]=cnt;
  72. E[++cnt]=head[v],V[cnt]=u,head[v]=cnt;
  73. }
  74. cnt=,dfs(,),build(,,n);
  75. char op[];
  76. for(int i=;i<=m;i++)
  77. {
  78. scanf("%s",op),in(u);
  79. if(op[]=='C') change(,li[u],ri[u],u,deep[u]);
  80. else tmp1=,tmp2=,query(,li[u]),printf("%d\n",tmp1);
  81. }
  82. return ;
  83. }

bzoj 4551的更多相关文章

  1. BZOJ 4551: [Tjoi2016&Heoi2016]树

    4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 748  Solved: 394[Subm ...

  2. 【BZOJ 4551】【TJOI2016】【HEOI2016】树

    http://www.lydsy.com/JudgeOnline/problem.php?id=4551 题目描述 给定一棵有根树(根为 1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最 ...

  3. BZOJ 4551 树

    线段树+标记永久化. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...

  4. BZOJ 4551[Tjoi2016&Heoi2016]树(树链剖分+二分)

    Description 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记 ...

  5. BZOJ 4551: [Tjoi2016&Heoi2016]树 并查集(&&图论?)

    反向操作,先把所有的标记都打上(记得统计标记的数目),然后依次撤销,合并到自己的上一个点pre,即fa[u]=getf(pre[u]) #include<cstdio> #include& ...

  6. BZOJ 4551 [Tjoi2016&Heoi2016]树 ——并查集

    树剖显然可以做. 然而有一种更神奇的方法,并查集+时光倒流. 每个节点指向它上面最近的标记节点,标记节点指向自己,然后删除标记,就可以用并查集查询了. #include <map> #in ...

  7. bzoj 4551: [Tjoi2016&Heoi2016]树【并查集】

    看起来像是并查集,但是是拆集合,考虑时间倒流,先把标记都打上,然后把并查集做出来 每次到一个修改点就把这个点的计数s[u]--,当这个s为0时就把这个点和他的父亲合并(因为可能有多次标记) #incl ...

  8. BZOJ 4551 HEOI 2016 树 (并查集)

    思路: 考虑时光倒流 这不就是并查集裸题了-----. //By SiriusRen #include <cstdio> #include <cstring> #include ...

  9. BZOJ 4551树题解

    好吧,洛谷的数据比较水暴力就可以过....(而且跑到飞快) 不过(BZ水不过去)还是讲讲正规的做法. 其实一眼可以看出可以树剖,但是,码起来有点麻烦. 其实有一种更简单的离线做法. 我们很容易联想到并 ...

随机推荐

  1. 转:EasyJSWebView

    EasyJSWebView 是类似 Android  javascriptInterface 的 uiwebview js 调用原生代码框架 示例代码: 先建一个MyJSInterface接口 @in ...

  2. 重定向(Redirect)相关的几个问题

    转载自:http://hi.baidu.com/fboosjgvuvckore/item/405a1cd7be2c36e3795daa8b 此次挂接用户中心,交互大都通过重定向(Redirect)实现 ...

  3. vsCode开发java遇到的问题整理、解决方案(持续更新)

    获取控制台输入的信息: 休息launch.json文件中的console属性internalConsole(内部控制台)修改为externalTerminal(外部控制台)即可正常获取输入信息,代码如 ...

  4. poj 2185 Milking Grid

    Milking Grid http://poj.org/problem?id=2185 Time Limit: 3000MS   Memory Limit: 65536K       Descript ...

  5. 单进程单线程的Redis如何能够高并发

    redis快的原因: 1.纯内存操作2.异步非阻塞 IO 参考文档: (1)http://yaocoder.blog.51cto.com/2668309/888374 (2)http://www.cn ...

  6. HTML面试基础问题

    1.Doctype作用?严格模式与混杂模式如何区分?它们有何意义?   1)<!DICTYPE>声明位于文档中的最前面,处于<html>标签之前,告诉浏览器的解析器,用什么文档 ...

  7. Header File Dependencies

    [Header File Dependencies] 什么时候可以用前置声明替代include? 1.当 declare/define pointer&reference 时. 2.当 dec ...

  8. 《PHP和MySQL Web开发》读书笔记(下篇)

    又与大家见面了.继续<PHP和MySQL Web开发>的总结. Chapter8.设计Web数据库 ·回去看看数据卡那本书吧,这里就不累赘谈这个东西. Chapter9.创建Web数据库 ...

  9. 20155306 2016-2017-2 《Java程序设计》第6周学习总结

    20155306 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 如果要将数据 ...

  10. HDU 2058 The sum problem 数学题

    解题报告:可以说是一个纯数学题,要用到二元一次和二元二次解方程,我们假设[a,b]这个区间的所有的数的和是N,由此,我们可以得到以下公式: (b-a+1)*(a+b) / 2 = N;很显然,这是一个 ...