摘要: https://www.luogu.org/problem/P4114 维护边权的话,用深度大的点表示这条边(可以遍历一边边询问两端深度,这样不需要修改dfs1,也可以在dfs1的时候向下走的同时把边权拷贝进深度大的点。),然后在链上问的时候,最后一次问的左端点要+1(小心左右端点原本重合)。 要注 阅读全文
posted @ 2019-08-06 23:48 韵意 阅读(177) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/297 一般的树剖是关于点权的,但是突发奇想好像边权也是一样的。做一些小改动。 cpp include define lc (o 1; if(ql = m + 1) update(rc, m + 1, r, ql, qr, v); pushup(o); } 阅读全文
posted @ 2019-08-06 22:09 韵意 阅读(170) 评论(0) 推荐(0) 编辑
摘要: https://www.luogu.org/problem/P3384 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x y 表示求树从x到y结点最 阅读全文
posted @ 2019-08-06 16:01 韵意 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 不会,先抄抄看。 来自oiwiki 我们先给出一些定义: fa 表示节点 在树上的父亲。 dep 表示节点 在树上的深度。 siz 表示节点 的子树的节点个数。 son 表示节点 的 重儿子 。 top 表示节点 所在 重链 的顶部节点(深度最小)。 tid 表示节点 的 时间戳 ,也是其在线段树中 阅读全文
posted @ 2019-08-06 15:59 韵意 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 来自叉姐 cpp struct CenterTree { int n; int ans; int siz; int son[maxn]; void dfs(int u, int pa) { son[u] = 1; int res = 0; for (int i = head[u]; ~i; i = 阅读全文
posted @ 2019-08-06 15:40 韵意 阅读(115) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/274 首先要判断是一颗树,并且找出树的直径。 是一棵树,首先边恰好有n 1条,其次要连通,这两个条件已经充分了,当然判环可以加速。 两次dfs找出直径,一边叫做L,另一边叫做R。(第一次写这个) 然后树形dp。 规定其中一个叶子作为树根。然后fx表示从x 阅读全文
posted @ 2019-08-06 14:14 韵意 阅读(168) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/31 还是不知道为什么RE了。的确非常玄学。 重构之后就没问题了。果然写的越复杂,分的情况越乱就越容易找不到bug。 cpp include using namespace std; typedef long long ll; int cnt[15]; i 阅读全文
posted @ 2019-08-06 14:07 韵意 阅读(155) 评论(0) 推荐(0) 编辑
摘要: https://scut.online/p/153 其实不需要用线段树,只关心相邻元素的差,像神仙那样用差分就可以O1维护的。 但是我偏要用。 交之前写的那个,注意没有st本身的线段树只有lazy标记,每次必须先query才能得到真正的a数组,反正也就一点点常数干脆都query算了。 一开始少考虑一 阅读全文
posted @ 2019-08-06 00:56 韵意 阅读(130) 评论(0) 推荐(0) 编辑