2013第八场多校

1003 mine http://acm.hdu.edu.cn/showproblem.php?pid=4678

这题最后两个小时一直在搞,因为我们队基本不会博弈,所以一直在卡...

一个简单博弈题,可以将游戏分为两个内容:

(1)只与数字相邻的数字。

(2)空格和与空格相邻的数字组成的区域。

然后就相当于多个同样的游戏,此时只要求出sg函数,异或起来即可。sg函数可以很容易地推出来,因为之前不了解sg函数,比赛的时候现场看的,所以一直再调,wa了很多发...

1004 Terrorist’s destroy   http://acm.hdu.edu.cn/showproblem.php?pid=4679

树形dp,FQ跟我说题意过后,果断就去敲了。

我的做法是记录了到达某个顶点最优的三条路径,保存路径最近一条边的id和边权,然后逐步递推就可以了。

1006 string http://acm.hdu.edu.cn/showproblem.php?pid=4681

CJboy搞定的,赛后我也没去想。

1010 Prince and Princess http://acm.hdu.edu.cn/showproblem.php?pid=4685

比赛的时候没去想,赛后搞了一天的题,一直没想到最后一种情况,一直在wa,后来参考标程才知道。

可以先尝试着匹配一发,得到一个最大匹配。现在想着如何在这个最大匹配上进行调整,使得某个匹配改变后果,仍然能够得到一个最大匹配。

现在的问题是,假设原来u匹配的点是k=match[u],现在判断u匹配v会不会导致最大匹配变小。

从增广路的角度考虑:

(1)、如果能找到一条增广路,使得v(公主)能够到达k(公主),那么最大匹配不变。

(2)、如果v(公主)能够到达一个尚未被匹配的点(公主),最大匹配也不会变。

(3)、如果某个尚未匹配的x(王子)能够到通过增广路到达k(公主),那么最大匹配也不变。

基于以上判断,写了个暴力bfs,预处理出所有点对之间的关系,最后O(n*n)的枚举,O(1)的判断。

2000+ms水过...

标程的解法就更为优越:

  一:因为存在E(u,k),E(u,v),然后建一条增广路的边E(k,u),此时再去询问是否存在一条路p(v,k),事实上就等同于去询问v,k是否在同一强连通分量内。

  二:为了将问题统一,可以虚拟一个顶点V1。添加E(V1,i),i为所有王子。添加E(j,V1),j为尚未匹配的公主。只要存在p(i,j),那么j和i一定在同一强连通分量内。

  三:同样的建图,虚拟一个顶点V2。添加E(j,V2),j为所有公主。添加E(V2,i),i为尚未匹配的王子。只要存在p(i,j),那么i和j一定在同一强连通分量内。

这样的建图就可以将问题统一,而且不影响答案的正确性。求强连通分量的复杂度也很低。膜拜....

原文地址:https://www.cnblogs.com/CooCoo/p/3295964.html