题意:给定一棵无根树,问至少需要添加多少条边,使得每个节点属于且仅属于一个圈,并且,每个圈的节点数至少为3(即不算环和重边)。若无解则输出-1,否则输出至少添加的边数。
思路:不会做,看的别人的解体报告。
思路当然是树形dp。每个点设置三个状态:
1、f[0, x]表示以x为根的子树,变成每个顶点恰好在一个圈中的图,需要添加的最少边数。
2、f[1, x]表示以x为根的子树,除了根x以外,其余节点变成每个节点恰好在一个圈中的图,需要添加的最少边数。
3、f[2, x]表示以x为根的子树,除了根x以及其所在的一条链(*链长度要大于1)以外,其余节点变成每个节点恰好在一个圈中的图,需要添加的最少边数。
于是状态转移方程(解释见下面四张图便清楚了,假设当前结点x共有k个儿子节点):