zoukankan      html  css  js  c++  java
  • 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一定在同一强连通分量内。

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

  • 相关阅读:
    页面上传图片后立即预览
    MySQL用户管理
    两种方式实现java生成Excel
    总结个关于MySQL数据库的问题
    Properties操作指南
    Python笔记之不可不练
    Python笔记之不可不知
    SpringMVC一路总结(三)
    SpringMVC一路总结(二)
    SpringMVC一路总结(一)
  • 原文地址:https://www.cnblogs.com/CooCoo/p/3295964.html
Copyright © 2011-2022 走看看