题解:P4785 [BalticOI 2016] 交换 (Day2)
题目描述
给定一个
对于节点
- 保持不变
-
-
-
解题思路
关键观察
一个节点的取值可能来自:
- 某个儿子节点
- 包含自己在内的某个祖先节点
- 某个祖先
u 的兄弟节点v (要求u 是其父亲的右儿子)
方法一:贪心
按照
将节点分为三类:
- 取值不来自儿子:祖先节点不能换到后代节点,左右子树不能交换
- 取值来自左儿子:祖先节点有且仅有一个能换到左儿子上,祖先和左子树不会与右子树交换
- 取值来自右儿子:祖先节点有一个可以换到子树内,左儿子也能换到右子树内
时间复杂度:
方法二:动态规划
设
转移时,当遇到右儿子最小的情况(假设
状态数:
时间复杂度: