圆方树
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
求一般图两点之间所有简单路径上的点权的最小值。 我们搞出圆方树,原图两点间的所有简单路径的并就对应了圆方树上两点间路径。圆点权值为原点点权,方点权值为这个点双的权值最小值。 树链剖分维护路径最小值即可。 但是这样修改一个点的点权时可能需要修改一堆方点,复杂度会爆炸。 于是一个小trick,我们每个方点只维护儿子圆点的权值最小值。这样更改一 个点的权值时,只需要更改它的父亲方点一个即可。查...原创 2018-05-31 20:33:21 · 450 阅读 · 0 评论 -
loj2587「APIO2018」铁人两项(圆方树+树形dp)
我们考虑暴力枚举起点和终点a,c,那么合法的b的就是a到c的所有简单路径的并。 我们搞出圆方树,圆点点权为-1,方点点权为点双大小,那么要求的就是树上圆点a到c的路径和。 所以答案就是圆方树上所有圆点两两之间的路径和。 考虑树形dp解决这个问题。 计算每一个点在多少条路径上即可。 复杂度O(n+m)O(n+m)O(n+m) #include <bits/stdc++.h> ...原创 2018-06-01 08:02:40 · 495 阅读 · 0 评论 -
bzoj5329 [Sdoi2018]战略游戏(圆方树+虚树)
我们搞出圆方树,那么能把两个点x,y分开的点就是树上x,y之间路径上的圆点个数(不包括x,y)。 对于一个集合的点来说就是求这些点任意两点的链的并。 而这就是这些点的虚树的边长和。于是对这些点建出虚树即可。 在连一条虚树上的边(x,y)时,计算这条链对答案的贡献(不含y),最后再加上虚树根的贡献即可。 复杂度O(n+m+|S|(log|S|+logn))O(n+m+|S|(log|S|+l...原创 2018-06-01 09:48:32 · 509 阅读 · 0 评论