多校第五场: 这场比赛打得太无力了,主要在于自己卡题太久。还有YY题又不想去做,这在现场赛是不会发生的。总觉得现在心态没有摆正,没有正视训练赛,这点需要改正。
1006 http://acm.hdu.edu.cn/showproblem.php?pid=4649 概率DP
(0)、之前遇到类似的题,所以看到就直接秒掉了,写得还挺顺的。
(1)、将每个数按2进制拆成20位,对于每一个位单独一个DP处理概率就行了,第i位期望就是(第i为1的概率)*(1<<i)。
1007 http://acm.hdu.edu.cn/showproblem.php?pid=4650 图论,找负环
(0)、一开始直接把这题定为分数规划(因为最近刚在看胡伯涛的最小割论文),搞了一下午,然后就跪了。赛后换了下思想,就暴力过去了。
(1)、分析了一下题目,得到一个结论:如果从u到v的过程中可以经过负环,那么u->v的答案就是比值最大的负环。如果没有遇到负环,那么答案就是u->v比值最大的一条路。
(2)、如果用分数规划来做,时间复杂度会很高(我没有想到什么好办法)n^4*log(val)。然后妥妥的跪了。
(3)、换一种思路,如果u->v之间存在负环,那么u->v之间最短路经过的点数是无穷多的。如果不存在负环,那么最短路经过的点数最多是n-1个点。因为n比较小,就可有直接预处理出dis[u][v][k]表示u->v走了k步的最小距离。
(4)、接下来就是如何判断u->v之间有没有负环出现了。可以假设o为u->v某条路径上的一个点,且o在某个负环上,那么只要遍历所有可能的o,找到最大的负环即可。O(n)枚举o,
如果(dis[o][o][z]<0)那么o点一定存在一个负环,对于每个点,求出经过这个点的最优比例的负环(负环最多也只会经过n个不同的点,所以z<=n就可以)。接下来就是直接枚举
o,判断u->o->v是否成立,若成立,则答案是最优负环,若不存在,则答案为最优最短路。