给一棵带边权的基环树,每次选一条有 \(\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})\) 级别。
基环树的话随便断环上的一条边即可处理。
标签:神秘,背包,重量,textbf,获得,基环树,条边 From: https://www.cnblogs.com/wwlwakioi/p/17483878.html