说实话,我是没有想到用费用流来求解的。
这道题,出看时,以为是DP。但是后来发现更本设不了状态,也转移不了。然后想了很久,只是发现了一些毫无意义的性质。
1.如果在每一个点,最多只有一个点会在上面(除了0号节点)
2.一个点走的必定是一段连续的路。这不显然吗?
3.每次走到一个点,一定走关于到这个点的最短路,且不能走没有扩展的点。
通过性质2,我们可以发现其实原问题就是选不超过k条链(可能链比较鬼畜)出来,覆盖整个图,且保证总长度最短。
通过性质3,我们可以先预处理
依照最小路径覆盖的方法。所以,考虑费用流建图:
1.
2.
3.
4.
为什么这么连呢?
.由性质1,由于每个点都可能是该路径的终点,所以每个点都向
如果
于是最后的最小费用最大流就是答案。
代码。。。自己写吧!反正又不难。