今天实在是智商不在线。
其实正常。
设 dpi,0/1,j,k 表示 i 染色成 0/1,i 到根的路径上还要 j 次两端都为 0 的边,k 条两端都为 1 的边,i 子树内的最大士气值。
初始化有 dpi,0,j,k=ai(j+1),dpi,1,j,k=ai(k+1)。
考虑如何转移。我们考虑 u→v 的一条边应当是染成什么颜色。
- 染成 0:dpu,0,j,k←max(dpv,0,j+1,k,dpv,1,j,k)。
- 染成 1:dpu,1,j,k←max(dpv,0,j,k,dpv,1,j,k+1)。
最后的答案就是 max(dp1,0,0,0,dp1,1,0,0)。
以后还是该多做一点这种图上 dp。
我们发现这个猫往哪里走十分的恶心。于是我们预处理一个 nxti,j 表示猫在 i,老鼠在 j 的时候,猫往哪里走。可以用 dijkstra O(n2logn) 预处理。
然后考虑 dp。设 dpi,j 表示猫在 i,老鼠在 j 的时候的期望步数。边界就是当 i 能在两步之内走到 j 时 dpi,j=0。
考虑如何转移。我们发现在一步走不到老鼠所在地时猫一定会走两步,设 se 表示猫走两步的地方。所以有 dpi,j=∑kdegj+1dpse,k。最后还要把它加上 degj+1dpse,j 表示老鼠不动的情况。
我连这个状态都没想到,实在是得练。
由独立集我们可以得到这是一个上升的子序列,由支配集我们可以得到这是一个极长的上升子序列。
直接把 a 求出来然后 dp 就是了。
唐成啥了。
我们发现 n 十分的小啊,于是记录 byi,j,bki,j 分别表示如果有 s=i,t=j 的查询时,y 和 k 最严苛的要求是什么。
然后我们二分 x,每次 chk 的时候枚举 i,直接 O(n) 处理出到 j 时的钱数和盈利次数,再 O(n) 检查,如果不符直接 return 0。最终的时间复杂度就是 O(m+n2logV)。
后日谈
唐成啥了。
日记
周五 10月 24 2025 518 字 · 2 分钟