2013第四场多校

多校第四场:6题,打得最好的一场多校。还是CJboy给力。本场比赛我基本上没什么贡献,搞04一搞就是一下午。最后看了09觉得只有状态压缩,不知道怎么优化。

1004 http://acm.hdu.edu.cn/showproblem.php?pid=4635   图论,强联通分量
(0)、一开始推理的时候思路很清晰,但是接着就脑残了,没怎么细想就直接去套样例。以为得到了正确的解法,只是需要一个特判。然后就开始去写代码了。代码写着写着就发现不好写。估计卡代码卡了1个小时。其中也一直在测样例是怎么回事,当时逻辑混乱了,行动就变得缓慢。当再次看时间的时候,发现已经过去一个多小时了。其实这个时候需要冷静一下,从头分析,别再继续卡代码。因为分析出错,导致写了很多无用代码,而这些无用代码的实现又有些难度,然后就卡代码了。分析要细致啊。。。一旦出错先认真看看有没有分析错,而不是轻率地作出决定。
(1)、先求一个强联通分量,得到一个或多个DAG图。
(2)、枚举某个强联通分支作为保持整个图不是强联通的关键区。设在联通分支v中点的个数为cv,得res=mas(res,n*(n-1)-m-(n-cv)*cv),即所有联通分支v以外的所有点都向v连一条有向边,v里面的点不能向外连边;

1009 http://acm.hdu.edu.cn/showproblem.php?pid=4640 状态压缩dp
(0)、比赛时候的分析无误,只是对于时间复杂度的估计又搞错了。看了题解后,学到了新的东西。
(1)、题目的要求可以看成是如何将一个状态分解成3个不想交的子状态。将问题简化,求如何将一个状态分解成不想交的两个子状态。这个的问题的解决方法在第三场多校就已经用到了。
(2)、现在问题回来,其实三个子状态可以看成1+(1+1),可以看成两个子状态1和(1+1),另外一个状态还得再分解。这样完全可以dp去做。dp[0][i]表示不将i状态分解。dp[1][i]表示将状态分解成两个子状态。dp[2][i]表示将状态分解成三个子状态。可以得到dp方程:dp[2][i]=min( max(dp[0][j],dp[1][j^i]), max(dp[1][j],dp[0][j^i]) ));

posted @ 2013-08-03 20:53  phk52  阅读(153)  评论(0编辑  收藏  举报