时间安排
7:30–7:40 读题,T2是送分题,T3数据结构。
7:40–8:00 T2,树上 dfs 一遍即可。
8:00–10:00 T1,发现可以看做路径计数问题,于是可以找到对应的组合数,用 lucas 求解,显然只与组合数的奇偶性有关,问题是不不能快速算出 1 的系数与对应 w 的乘积和。打表发现 1 比较稀疏,于是对暴力一边剪枝一边对拍,能跑到 1e6 左右。
10:00–11:30 T3,首先有暴力,然后对于链的部分分,可以用 set 简单维护。大部分操作都是简单的,瓶颈在于不太会对于一个连通块修改,想到离线启发式合并、并查集之类的东西,不过都做不了。
11:30–12:00 T1,修 T1 的常数,同时思考有没有其他方法。
回顾反思
T1:
想到了系数只与组合数奇偶性有关,可以用 lucas 求解。
于是就只是用 lucas 计算了,而没有注意到 lucas 计算的过程在二进制上的性质,实际上为C(n,m)奇当且仅当 m 在二进制上是 n 的子集。
没能 A 掉,靠乱搞剪枝暴力丢了 20 分,不太应该。
求解时要多关注性质。尤其注意 lucas 是对组合数在 mod 进制下对每一位求解并累积的本质,当 mod=2 时,该位为 1 就只有 C(0,0)C(1,0)C(1,1) 三种可能,对应了一个二进制的子集关系。
T3:
比较巧的一道题。
考场上,对于其他操作都是简单的,但是想不到一个连通块的信息怎么维护。
瓶颈在于如何修改和维护树上一个同颜色连通块的信息。
考虑得到 dfs 序后,一个子树对应了一个区间,
对于一个连通块,我们可以找到其最靠上的颜色相同的点 x,那么其子树内与它相连的若干连通块也是若干段区间,对应到线段树上若干个区间。而在 x 子树内,不同连通块可以由其被异色点覆盖次数唯一区分,在线段树上找到 x 子树对应的区间,记 x 被异色覆盖的次数为 num ,那么线段树上被对应异色覆盖为 num 的子区间即对应了 x 所在的连通块。
这个套路可以记一下。