基环树
ACM败犬
这个作者很懒,什么都没留下…
展开
-
bzoj 1791: [Ioi2008]Island 岛屿(基环树直径(递归扣环模板))
题目大意:给你一堆基环树,求这些基环树的直径和。 题解:求基环树的直径:按直径是否经过环分类讨论:对于不经过环的直径,就是环上的点为根节点所在的子树的直径,取最大值。经过环的直径:显然要求出环上每一个点到它的子树里的点的最远距离 disdisdis。将环复制一倍展开,然后枚举环上每一个点uuu作为终点,用单调队列优化找出 disv−sumvdis_v - sum_vdisv−sumv的最大值...原创 2019-08-10 17:18:23 · 218 阅读 · 0 评论 -
bzoj 1040: [ZJOI2008]骑士(基环树DP,基环树上最大点权独立集)
题目大意:求基环树上的最大点权独立集。 题解:先考虑普通树的最大点权独立集:dp[i][0] 表示不选 i 点,以 i 为根的子树的最大点权独立集,dp[i][1] 表示选 i 点,以 i 为根的子树的最大点权独立集,然后简单树形DP,对于根结点取选和不选中的较大值。基环树,多了对环的处理。 思路一:对环上每一个点进行简单树形DP,然后将环上的点提出来做一遍环形DP,处理方法是枚举一个点选和不选...原创 2019-08-11 14:02:35 · 424 阅读 · 0 评论 -
Codeforce 835 F. Roads in the Kingdom(基环树DP + 单调队列,基环树环上删边使直径最小)
题目大意:给你一棵基环树,让你在环上删掉一条边,使得树的直径尽量小。 题解:不考虑删边的基环树的直径是如何做的:对环上每个点树形DP,dp[i][0],dp[i][1]dp[i][0],dp[i][1]dp[i][0],dp[i][1]分别记录i到以 i 为根的子树的最远距离和次远距离,用单调队列处理直径过环的情况。 环是双向的,处理过环情况时将环断开复制一倍,然后用单调队列枚举一个点做终点找能和...原创 2019-08-11 20:04:58 · 423 阅读 · 0 评论