Atcoder abc302
https://atcoder.jp/contests/abc302/tasks
Ex
n点树,无向边,点上 有 写有数字Ai的球 和写有数字Bi的球
令 v = 2..n 个独立问题
- path(点1 到 v) 每个点 取一个球, 问 不同的数字 的个数 最大为多少
n 2e5
ai,bi [1,n]
2s
1024mb
我的思路
考虑把1选做根
那么每次查询的就是 当前点到根的路径上每次 选一个数, 选出数字 max(distinct)
显然 ans[u] - ans[fa[u]] \in [0,1]
如果单次求, 就是做并查集, 对于是树的 贡献 = 边
对于 不是树的(边 >= 点) 贡献是点
听起来 需要一个 可持久化 并查集?
点+点 = 树(+1)
点+树 = 树(+1)
点+图 = 图(+1)
树+树 = 树(+1)
树+图 = 图(+1)
图+图 = 图(+0)
树内部 = 图(+1)
图内部 = 图(+0)