题目来源:http://algorithm.openjudge.cn/2017mock/H/
解题思路:
- 对于图G = (V,E)来说使用最少的路径,使得这些路径中的顶点互不相交并且这些路径中顶点的集合恰好时这个图的顶点。
- 假设一条路径都没有,此时覆盖原图需要|V|条路径(每个顶点算作一个路径)。
- 一旦两个顶点之间存在1条路径,那么需要的路径就会减少1条,因为1条边可以覆盖2个顶点。因此如果有K条这样的路径,那么就能够减少K条路径(1条路径可以减少额外的1个用于覆盖的顶点)。
- 网上大神特别巧妙的思路,将一个定点划分为两部分,V划分为V1和V2, 将V1视作出边,V2视作入边。假如顶点U和V之间有连边,则连接U1和V2,将所有的出边和超级源点S连接,容量为1,将所有的入边和超级汇点T连接,容量为1,求该网络流的最大流,最后用|V|-maxFlow即为最小的路径覆盖数。
AC代码
1 | /* |