https://www.luogu.com.cn/problem/P4338 好了可以回到这个问题了。。首先看静态的问题:已知树上每个点 access 的次数,求最大虚实边的切换的总次数。
我们考察每个点对答案的贡献,当且仅当相邻的两次 access 操作发生在不同的子树中时,会带来 +1 的贡献。于是变成构造一个多重集的排列,使得相邻元素不同次数最多。不难贪心的去构造最优解,方法是每次尽可能选和上一次所在子树不同的,剩余次数最多的元素,不难再此之上数学归纳法 yy 出公式(abababa) 。每个点的计算都是独立的,于是可以 dfs() 得到所有节点的贡献。