树
zerollt
noi接近退役?
展开
-
[JLOI2014]松鼠的新家 倍增LCA+树上差分
题目描述 题目本来想写一道Tarjan的,结果发现这题倍增比较好写 这题主要要搞懂树上差分这东西(NOIP前这东西卡了我好久) 大概要注意的就是对于除了出发点以外的所有点都是重复算了的,所以最后要有-1操作代码#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> u原创 2017-12-11 18:08:18 · 185 阅读 · 0 评论 -
Luogu P3398 仓鼠找sugar 倍增LCA
题目描述 题目差不多是裸的LCA吧 只要处理好两条相交路径之间的关系就好了 如果两条路径相交,那么一条路径的LCA一定在另一条路径上 那么需要满足dep[lca1] >= dep[lca2] lca(lca1,s) == lca1 || lca(lca1,t) == lca1代码#include<iostream> #include<cstdio> #include<cstdlib> #in原创 2017-12-11 18:58:31 · 253 阅读 · 0 评论 -
NOIP2016 天天爱跑步 TarjanLCA+树上差分
题目描述 题目这题的差分和一般的树上差分写法差好远,参考了dalao的题解还磨了好久才写出来主要要注意的有以下几点: 1.起点s和终点t千万不要弄错(被它卡了半天的我QAQ) 2.记深度为d的起点的总数为cnt[d]:对于一条向上走的路,在起点处cnt[d]++,搜到终点的时候cnt[d]–;向下走的路,终点处cnt[d]++,起点处cnt[d]–给这道题的细节处理跪了ORZ,磨了三天才终于A原创 2017-12-15 21:09:01 · 311 阅读 · 0 评论 -
NOIP2015 运输计划 二分答案+Tarjan LCA+树上差分
题目描述 题目需要的最短时间,明显二分 判断答案是否可行只要把超过答案的路径都记下来,找到一条所有超过的答案路径都经过的边,尝试删掉它,如果最长的路减去它小于答案,那么此答案就是可行的解 至于统计所有路径都经过的边,差分统计一下就好经过running的折磨,感觉transport突然变简单了代码#include<iostream> #include<cstdio> #include<cstri原创 2017-12-16 21:50:38 · 273 阅读 · 0 评论 -
[HAOI2015]树上操作 【树链剖分】
[HAOI2015]树上操作 卡我的居然是线段树,orz,尝试了各种lazy标记终于A了 这道题好像比树链剖分的模板题还简单 其实感觉树剖并不难理解,核心就是两次dfs,第一次分轻重链,第二次处理各种与编号有关的东西,处理完之后以某一结点u为根的子树就是id[u]~id[u]+siz[u]-1的节点,u到这条链的顶点的节点就是id[top[u]]~id[u]这些点,所以就很好处理了 对于本原创 2018-02-01 17:53:28 · 151 阅读 · 0 评论 -
[ZJOI2008]树的统计 【树链剖分】
[ZJOI2008]树的统计 感觉树剖是我打过要调最少的数据结构了 询问就一直顺着链走就好 代码 #include #include #include #include #include #define ll long long #define lo o #define ro o #define mid ((l+r)>>1) using namespace std; const ll原创 2018-02-01 20:48:39 · 159 阅读 · 0 评论 -
[SDOI2011]染色 【树链剖分】
[SDOI2011]染色 线段树部分还要带两个成员lc(该区间最左边的结点颜色)和rc(该区间最右边的结点颜色) ,其他应该都是裸的树链剖分 我被卡死是在询问的时候,最后top[u]==top[v]的时候,要判断两边的color和之前的两条链的顶端是不是一样(我把之前两条链的顶端记反了) 代码 #include #include #include #include #include #原创 2018-02-07 19:14:58 · 182 阅读 · 0 评论