color coding ,sample k-th path algorithm
什么是color coding 算法
color coding算法是一种近似算法,主要用来解决找到一个图的包含k个顶点的简单路径的最小(最大)权值路径。
比如这个问题:
给你有n个顶点,m条边的无向图,每无向边条边由u,v,w组成,w为这条边的权值,现在求一个包含k个顶点的简单路径,使得这个路径上所有边的权值和最大。
数据范围: n < = 1 e 4. m < = 1 e 4 , 2 < = k < = 6 n<=1e4.m<=1e4,2<=k<=6 n<=1e4.m<=1e4,2<=k<=6
暴力方法:
最暴力的方法就是枚举每个顶点 v v v作为路径的起点进行dfs,最坏情况下的时间复杂度为 O ( n ∗ m ) O(n*m) O(n∗m)
我们用color coding解决:
第一步:首先我们对图中的点随机染色,颜色的种类是k种(为选取的简单路径的顶点个数)。而该算法要求枚举的路径上的所有顶点均颜色不同。
第二步:接下来我们进行 d p dp dp, d p [ s ] [ v ] dp[s][v] dp[s][v] 代表此时路径颜色集合状态为s,路径终点是 v v v的路径最大权值是多少。
对于这个DP,我们先对之进行初始化。把所有的 d p [ ∗ ] [ ∗ ] dp[*][*] dp[∗][∗]设为无效值(-inf)。然后对于每个顶点v和其颜色color[v], d p [ 1 < < c o l o r [ v ] ] [ v ]