题目
给一棵 n n n个节点的树, 节点编号为 1 1 1~ n n n, 每条边都有一个花费值。
有 k k k个机器人从 s s s点出发, 问让机器人遍历所有边,最少花费值多少?
分析
基本思路
Q:
指定节点出发,那么我们需不需要考虑从当前节点向子节点和祖先节点两种情况呢?
A:
不需要,虽然是指定 s s s 出发,但是因为是无根树,所以我们依然可以只考虑子节点的情况,只需要把 s s s 当作树根即可
想到这里,我们应该已经意识到这是一道树形dp的问题,则子问题的划分显而易见:
从以 u u u 为根节点的子树出发,派出 k k k 个机器人,遍历完子树所需的最小代价
回边的细节分析
Q:
如果把 k k k 个机器人派出,那么他们还返不返回呢?
A:
显然,很可能要返回
那么这里又出现了一个很重要的问题:回边,这也是这道题的难点
特殊情况一:
如果只有一个机器人,且最后需要返回 s s s
一个很显然的结论是:每一条边显然要被走过两遍,总代价设为 s u m sum sum 则 s u m = ∑ w ( u , v ) ∣ u , v 是树上相邻的节点, w ( u , v ) 是边权 sum=\sum w(u,v) |u,v是树上相邻的节点,w(u,v)是边权 sum=∑w(