这是本文档旧的修订版!
基环树由普通树额外增加一条边组成,是图论经典问题之一。
给定一个有向图(不保证连通),每个点有一条出边。问有多少种方案能将边重定向,使得图中不存在有向环。
首先不难得出结论每个点一条出边的图正好构成基环树森林。
单独考虑每棵基环树,发现只要基环树上的环上所有边不同向即可,其余边方向任意。设第 $i$ 个基环树的环长度为 $w_i$,则答案为
$$ 2^{n-\sum w_i}\prod (2^{w_i}-2) $$
给定 $n$ 个物品,每个物品有一个权值 $w_i$,同时第 $i$ 个物品不能和第 $p_i$ 个物品同时选择。问能得到的最大权值。
问题等价于基环树森林的最大权独立集。
考虑每个基环树,任取环上的一条边,记为 $(u,v)$。删除这条边,然后跑强制不取 $u$ 情况下的最大权独立集和强制不取 $v$ 情况下的最大权独立集。
于是每个基环树的贡献为上述两种情况下的最大者,可以通过树形 $\text{dp}$ 计算,最后答案为所有基环树贡献相加。
关于找 $(u,v)$ 边可以通过并查集,而强制不取可以将点权设为 $-\text{inf}$ 或者将不取的点为根节点进行 $\text{dp}$。
题目大意就省略了,大概就是给定基环树森林,求所有基环树的最长路径之和。(注意最长路径 $\neq$ 直径)
考虑每棵基环树的情况,首先找到环,先不考虑环上的边,求出环上每个点的子树的直径的最大值,这是可能的答案之一。
另外求出环上每个点到它子树的叶子节点的最远距离 $d$。设环长为 $s$,任取环上的点对 $(u,v)$,于是另一种答案为
$$ \max(d(u)+d(v)+\text{dis}(u,v),d(u)+d(v)+s-\text{dis}(u,v)) $$
考虑规定一个环上的起始点,于是 $\text{dis}(u,v)=\text{pre}(u)-\text{pre}(v)$,维护两个前缀 $\text{max}$ 即可 $O(n)$ 统计所有点对贡献。