第一题
【题目及题号】snow superoj962
【题解】
题目其实就是求带权值的最小覆盖,那么假设所有的覆盖都用代价来完成,sigma(f[i])就为最坏情况;
现在把每个点拆成两个(u1,u2)把ui1和st连边,ui2和ed连边,流量为f[i],如果出现ui,vi相连,就将ui1连向vi2,
流量为w(u,v)。问题就转化成了我们能使用多少不用代价的覆盖。
这就是个最大流问题了。答案就是sigma(f[i])-maxflow;
【注意】
本题之前有一个地方让我感到困惑,就是最大流就不能保证路径的连续性。后来我发现,换起点(从st到u1)的代价是被计算了,
所以路径连续性被计算了。
第二题
【题目及题号】game superoj963
【题解】
f[i][j][jj][kk]表示到第i位,该位数字mod7余数为j,前面是否出现过j,是否取到上限的不是7的倍数且数字中含7的数量。
其他见代码。
【注意】
数位DP……我还真没有什么要说的。
第三题
【题目及题号】travel superoj964
【题解】
60% O(m^2)记录用到当前边能够得到的最优解。
100%
将边排序,从小到大权值转移,记录能够更新到的点的最优解。
然后用line.ss的最优解更新该边连向的终点的最优解。
注意权值可能相等,所以对于权值相等的边要先用另外一个数组记录答案,最后再一起更新解。
【考试ING】
我傻逼的不行以为会出现边权大于当前边的情况,可是明明我就排了序啊……不可能出现这种情况。