[POJ2404]Jogging Trails(中国旅行商问题)(一般图的匹配——状压DP)

题目:http://poj.org/problem?id=2404

题意:有个n(n<=15)的点和m条无向边,每条边都有自己的权值。现在你要从某个点出发,每条边可以经过多次但要保证每条边至少走一次。现在你要找出一个方案,使得经过所有边的权值和最小,输出最小的权值和。

分析:

首先容易想到的是如果这个图G的每个点的度数都为偶数,那么G是欧拉图,那么一定存在欧拉回路,那么ans=∑每条边权值

如果图G不是欧拉图,那么必有偶数个奇度数的点。

如果我们把每条边都看作有无数条的话,那么原问题就是等价于走一个欧拉回路,也就是在把每条边当作只有一条的边的情况下,将某些边复制若干条,使得成的图G'有欧拉回路且权值和最小。

要把图G加边成G‘,很容易想到其实就是对那偶数个奇度数点进行匹配。既然要最后的边权和最小,那么就可以对偶数个奇度数点重新建图,每两点之间的边的权值定义为图G中两点的最短路径(floyd一下就行),最后用状态压缩dp进行匹配就行了。

原文地址:https://www.cnblogs.com/wmrv587/p/4336076.html