时间安排
7:30–7:50 看题,发现 T1 和前几天考的 T3 思想一模一样,T2 是个神秘 dp ,T3想了想发现只能拿个暴力分。
7:50–8:50 T1,写正解,暴力。对拍。
8:50–11:00 T2, 想到右树形 dp 。小样例过了。写了个暴力对拍发现拍不上。调试了一下发现自己漏了一些细节。改掉一个细节后发现还是拍不上。瞪。想了想特殊点,发现基本思想和直接做 dp 完全一致。菊花图的话没有细节这个假掉的 dp 都能过,其他链之类的部分分完全没作用,会它们就会正解,我的 dp 问题找不出来这写部分分照样没法写。所以问题是我不知道 dp 哪里出了问题。
11:00–11:30 T3,打了个暴力。
11:30–12:00 瞪 T2 。
回顾反思
T1:
和前几天的 T3 一模一样。
对操作倒叙处理,那么询问就是加减权值,修改是合并连通块。
重点是注意到,每次操作最多增加 2 个连通块,合并能把若干连通块合并为一个,用 set 维护一下连通块那么总的连通块数大概是 O(n+Q) 级别的,于是就是对的。
合并连通块均摊复杂度的套路。
T2:
赛时的想法基本和正解一样,但是分讨讨假了一些情况,赛后稍微改一改就有 60 分左右的,不过还是假。
主要问题在于分讨一个点离开根再回来的方案讨假了,但实际上可以发现分讨一个点离开根不再回来相对是更简单的(虽然还是要细心分讨),取个补就是回到根了。这个可以另设一个 dp 计算。
考虑问题要多想想它的补是否更简单、容易。对看似简单的形式 dp 不一定容易,其看似情况较复杂的补的转移不一定困难。
T3:
一个暴力题。
从一个树中选出两个不交且同构的连通块(两个连通块的并不一定等于全集),求连通块最大点数。
枚举两连通块的根 s,t ,设两棵树同构时最大点数为
f
s
,
t
f_{s,t}
fs,t ,那么要枚举 s, t 的两个儿子一一考虑对应然后递归做,这个直接做是指数级别的,但是实际上若 u,v 两点对应,可以看做是权值为
f
u
,
v
f_{u,v}
fu,v 的匹配,于是对 s,t 的儿子之间跑最大权匹配就行了。
复杂度约为
n
5
n^5
n5 。
重点是把同构意义下点的对应看做带权匹配,一对 u,v 匹配的权值即为以 u,v 为根的子问题的答案。