[CH#58解题报告]

题目:http://206.contesthunter.org/contest/CH%20Round%20%2358%20-%20OrzCC%E6%9D%AFnoip%E6%A8%A1%E6%8B%9F%E8%B5%9Bday2

分析:

T1:二分就行

T2:主要的问题就是当a是a和b的LCA时,a->b这条链上a下方的一个点是谁?很明显可以从b暴力向a走,找这个点,拿到60分。我当时想的是用树链剖分,这样暴力向上走就可以直接走重链的顶点,大致做到Logn,但是n=200000,树链剖分的dfs就直接爆栈了……正解就是采用离线的方法求这个点,把所有这类的询问都存下来,然后一遍dfs整颗树,按时间戳加入栈中,那么当b进入栈的时候,a一定在栈中,且a头顶上的就是所求的点。(或者倍增暴力搞)

T3:DP的最大问题是不知道当前哪些障碍点已经移除,于是我们换一个状态表示,f[i,j,p']表示左上角在(i,j)时,之前的2k-2步方向表示的状态为p'时的最小消去障碍物个数,我们可以通过预处理和位运算将p'计算成p。时间空间复杂度O(4knm)。

 
原文地址:https://www.cnblogs.com/wmrv587/p/4052016.html