https://www.lydsy.com/JudgeOnline/problem.php?id=4551

https://www.luogu.org/problemnew/show/P4092

这当然是树剖裸题,还可以不写线段树用set

(只用set达到一个log是不行的,询问中,中间遇到的路径并不总是整段的轻/重链,可能会有半段的)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. #include<set>
  6. using namespace std;
  7. #define fi first
  8. #define se second
  9. #define mp make_pair
  10. #define pb push_back
  11. typedef long long ll;
  12. typedef unsigned long long ull;
  13. typedef pair<int,int> pii;
  14. struct E
  15. {
  16. int to,nxt;
  17. }e[];
  18. int f1[],ne;
  19. int n,q;
  20. void me(int a,int b)
  21. {
  22. e[++ne].to=b;e[ne].nxt=f1[a];f1[a]=ne;
  23. }
  24. int hson[],tp[],sz[],dp[];
  25. int ar[],lp[],f[];
  26. struct Cmp
  27. {
  28. bool operator()(int a,int b)
  29. {
  30. return dp[a]<dp[b];
  31. }
  32. };
  33. set<int,Cmp> t2[];//以此点为top的链上所有标记点
  34. void dfs1(int u,int fa)
  35. {
  36. sz[u]=;
  37. for(int k=f1[u];k;k=e[k].nxt)
  38. if(e[k].to!=fa)
  39. {
  40. dp[e[k].to]=dp[u]+;
  41. dfs1(e[k].to,u);
  42. sz[u]+=sz[e[k].to];
  43. if(sz[e[k].to]>sz[hson[u]])
  44. hson[u]=e[k].to;
  45. }
  46. }
  47. void dfs2(int u,int fa)
  48. {
  49. ar[++ar[]]=u;lp[u]=ar[];
  50. f[u]=fa;
  51. if(u==hson[fa]) tp[u]=tp[fa];
  52. else tp[u]=u;
  53. if(hson[u]) dfs2(hson[u],u);
  54. for(int k=f1[u];k;k=e[k].nxt)
  55. if(e[k].to!=fa&&e[k].to!=hson[u])
  56. dfs2(e[k].to,u);
  57. }
  58. int main()
  59. {
  60. int i,a,b;
  61. char tmp[];
  62. scanf("%d%d",&n,&q);
  63. for(i=;i<n;i++)
  64. {
  65. scanf("%d%d",&a,&b);
  66. me(a,b);me(b,a);
  67. }
  68. dfs1(,);dfs2(,);
  69. //for(i=1;i<=n;i++) printf("%d\n",f[i]);
  70. //puts("b");
  71. //for(i=1;i<=n;i++) printf("%d\n",ar[i]);
  72. //puts("c");
  73. t2[].insert();//tag[1]=1;
  74. while(q--)
  75. {
  76. scanf("%s",tmp);
  77. if(tmp[]=='C')
  78. {
  79. scanf("%d",&a);
  80. t2[tp[a]].insert(a);
  81. }
  82. else
  83. {
  84. scanf("%d",&a);
  85. set<int,Cmp>::iterator it;
  86. while()
  87. {
  88. it=t2[tp[a]].upper_bound(a);
  89. if(it!=t2[tp[a]].begin())
  90. {
  91. --it;
  92. printf("%d\n",*it);
  93. break;
  94. }
  95. a=f[tp[a]];
  96. }
  97. }
  98. }
  99. return ;
  100. }

洛谷 P4092 [HEOI2016/TJOI2016]树 || bzoj4551的更多相关文章

  1. 洛谷P4092 [HEOI2016/TJOI2016]树 并查集/树链剖分+线段树

    正解:并查集/树链剖分+线段树 解题报告: 传送门 感觉并查集的那个方法挺妙的,,,刚好又要复习下树剖了,所以就写个题解好了QwQ 首先说下并查集的方法趴QwQ 首先离线,读入所有操作,然后dfs遍历 ...

  2. [洛谷P4092][HEOI2016/TJOI2016]树

    题目大意:给你一棵树,有两个操作: $C\;x:$给第$x$个节点打上标记 $Q\;x:$询问第$x$个节点的祖先中最近的打过标记的点(自己也是自己的祖先) 题解:树剖,可以维护区间或,然后若一段区间 ...

  3. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  4. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  5. 洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告

    P2824 [HEOI2016/TJOI2016]排序 题意: 有一个长度为\(n\)的1-n的排列\(m\)次操作 \((0,l,r)\)表示序列从\(l\)到\(r\)降序 \((1,l,r)\) ...

  6. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  7. 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告

    P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...

  8. 洛谷P2824 [HEOI2016/TJOI2016]排序(线段树)

    传送门 这题的思路好清奇 因为只有一次查询,我们考虑二分这个值为多少 将原序列转化为一个$01$序列,如果原序列上的值大于$mid$则为$1$否则为$0$ 那么排序就可以用线段树优化,设该区间内$1$ ...

  9. 洛谷 P2824 [HEOI2016/TJOI2016]排序 (线段树合并)

    (另外:题解中有一种思路很高妙而且看上去可以适用一些其他情况的离线方法) 线段树合并&复杂度的简单说明:https://blog.csdn.net/zawedx/article/details ...

随机推荐

  1. Vue中的methods、watch、computed

    看到这个标题就知道这篇文章接下来要讲的内容,我们在使用vue的时候methods.watch.computed这三个特性一定经常使用,因为它们是非常的有用,但是没有彻底的理解它们的区别和各自的使用场景 ...

  2. Nginx配置故障转移

    当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用. 如果上游服务器的某一台宕机了,直接轮训到下一个~ 8080 8081 8082 关 ...

  3. CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)

    本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE ...

  4. Linux-打包和文件系统

    1 文件后缀 在Linux中后缀没有实际意义 2 打包文件 tar c 创建一个归档 v 查看过程 f 指定文件名 t 列出归档内容 x 从归档中解压出文件 C 改变到哪个目录 z gzip压缩 j ...

  5. BZOJ_3781_小B的询问_莫队

    BZOJ_3781_小B的询问_莫队 Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值 ...

  6. BZOJ_1671_[Usaco2005 Dec]Knights of Ni 骑士_BFS

    Description Bessie is in Camelot and has encountered a sticky situation: she needs to pass through t ...

  7. JS字符串与十六进制的相互转换(转载)

    原文链接:http://www.cnblogs.com/zack-/archive/2012/04/17/website_using.html 1.字符串转换为十六进制 主要使用 charCodeAt ...

  8. js 异步问题

    如果发现前端的异步请求,network有发送成功而且有返回值,但是没有进前端的callback成功回掉函数内,这时候就需要检查是不是配置文件做了语法限制,只能返回某些数据格式,不能返回某些数据格式. ...

  9. 怎么在Ubuntu下设置程序的快捷键

    参考 http://jingyan.baidu.com/article/1e5468f97f9e75484861b773.html 我的系统是 64bit Ubuntu14.04 我设置了 gedit ...

  10. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(下)

    https://www.yuque.com/yuejiangliu/dotnet/asu0b9 端点 Endpoint Authorization Endpoint,授权端点 在浏览器里面和用户交互 ...