神秘基环树

给一棵带边权的基环树,每次选一条有 \(\textbf{3}\) 条边的链,获得这 \(\textbf{3}\) 条边的权值并删去它们(只删边,点保留),求能获得的最大价值。\(n\le 10^5\)

Sol

先考虑树怎么做,容易发设 \(f_{i,0/1/2}\) 表示节点 \(i\) 往下挂了长为 \(0/1/2\) 的链时获得的最大价值,\(1\)\(2\) 会互相配对。我们将 \(1\) 的重量设为 \(1\)\(2\) 的重量设为 \(-1\),实际上就是一个背包。

但是直接跑背包会被卡到 \(\Theta(n^2)\),不妨考虑随机打乱顺序,背包的最大容量只需要到 \(O(\sqrt{n})\) 级别。

基环树的话随便断环上的一条边即可处理。

posted @ 2023-06-15 19:10  Smallbasic  阅读(22)  评论(0)    收藏  举报