标签:多次 超级 mat sum 二分 最大流 span 二分图 一个
最小不相交路径覆盖:使用最小条数的路径,覆盖每个点恰好1次。
最小可相交路径覆盖:使用最小条数的路径,每个点可以覆盖多次。
最小可相交路径覆盖做一次Floyd传递闭包变成最小不相交路径覆盖。
最小不相交路径覆盖使用二分图匹配:把每个点x拆成x1(出度)和x2(入度),初始状态没有匹配,使用的路径数量是n(单个点也是一个路径),然后原图加的边会匹配一个出度和一个入度,然后向超级源点和超级汇点分别连权值为1的边,那么每个点的出度和入度必然是0或者1,这样求出最大流之后,用n减去最大流就是最小路径覆盖。
使用树形dp解决,设 \(dp[u][0]\) 表示 u节点的子树中,u节点没有参与路径覆盖时的使用的最小条数的路径。 \(dp[u][1]\) 表示u节点的子树中,u节点参与路径覆盖时使用的最小条数的路径。
那么显然有
\(dp[u][0]=min(dp[u][0],\sum_{v\in ch[u]} dp[v][1] + 1)\) 表示这个点保留,不参加子树的路径,自己增加一个条数
\(dp[u][1]=min(dp[u][1],\sum_{v\in ch[u],v\neq v_0} dp[v][1] + dp[v_0][0])\) 表示这个点加入子树v0的路径。
问题的边界是叶子,叶子没有子树,扩充一下定义。
\(dp[u][0]=1\)
\(dp[u][1]=1\)
标签:多次 超级 mat sum 二分 最大流 span 二分图 一个
原文地址:https://www.cnblogs.com/purinliang/p/14225530.html