多校第二场:
1002 http://acm.hdu.edu.cn/showproblem.php?pid=4612
(1)、求双连通分支。
(2)、求树的直径。
1009 http://acm.hdu.edu.cn/showproblem.php?pid=4619
(0)、因为判断两张卡牌是否相交那里写错了,导致浪费了近一个小时的时间。本场比赛第一失误。可以早一点找FQ帮忙,早一点确定问题出现的地方。其实跟自己不熟悉HK算法也有很大关系,不然也不会一个模板一个模板地去试。
(1)、二分图匹配。求最小点覆盖。
1006 http://acm.hdu.edu.cn/showproblem.php?pid=4616
(0)、不算难的树形DP,比赛的时候因为没有真正想好问题,就去敲代码,导致卡题,本场比赛第二失误。这也是我的一大毛病,今天又深受其害,还是太心急了。
(1)、设dp[n][2][4]的状态。其中dp[u][0][j]表示以u为起点,当前已中j个trap(包括当前点的),然后向子节点的方向行走能得到的最大价值。dp[u][1][j]表示从某个子
节点,走到u(u为终点),当前已中j个trap(包括当前点的),能够得到的最大价值。
(2)、某个节点在一条最优路径中只有三种情况,终点、起点,中间节点。这些结果都可以由dp状态得到,最后枚举一下必经节点u,得到最优解。
1004 http://acm.hdu.edu.cn/showproblem.php?pid=4614
(0)、写了近两个小时的线段树,还是对着数据跑,现场还不知道能不能调出来。做题过程中出现三个bug:
1.分析题目的时候没有想到起始位置也是要查找的,分析阶段出现漏洞。
2.写代码的时候,没有参照事先写好的代码来,思维跟不上,写搜索下标时写错对象了。
3.搜索下标的函数中,忘了给线段树进行pushup和pushdown的操作,这是很容易出错的地方。
(1)、维护这样一棵线段树,实现四个操作:区间置1,区间置0、区间求和,查找第x个为0的位置。用lazy数组保存节点当前所处状态,-1表示子节点更新完成,0表示子节点需要
全部置0,1表示子节点全部置1。线段树的实现还是比较容易的,但是细节需要把握好。
1008 http://acm.hdu.edu.cn/showproblem.php?pid=4618 乱搞题
(0)、比赛的时候没有去想,是因为没有仔细读题,只是大概看了下题目没什么想法。以为求的是一个最大矩形而不算正方形,而且当时心情比较紧张,不怎么想搞这种没把握
的题。赛后做了一个小时,不知道真正比赛要花多少时间来做。
(1)、其实最暴力的想法就算枚举点,边长,然后判断一下是否合法就行。按照这个思路想,其实就可以先预处理出以点(i,j)结尾,长度为k时,垂直方向和水平方向是否为一个
回文串(n^3)。现在再去枚举k,那么,刚刚预处理出来的条件就可以化成2维。其实就是这样一个问题:给你一个矩阵,矩阵只有0和1,求是否存在某一点(i,j)使得以该
点结尾,水平方向上连续的1和垂直方向上连续的1的个数都大于k。这个问题可以在O(n^2)内解决,所以总体复杂度还是O(n^3)。
(2)、按照刚刚的思路,写完代码,发现MLE了。之前没有算空间复杂度,结果直接给卡了。经过半个小时的优化,终于过了...