快进到 8:30 。先看 A 。一眼按 t 排序,然后一路推过去,但是感觉维护很麻烦。一开始想用 set 维护连续段,但是写了下感觉非常麻烦。写到一半突然发现可以直接线段树,于是换成了线段树。直接对 a_i-i 区间覆盖即可。过了样例大概是 9:15 。
然后看 B 感觉很可做,就开始做 B 。9:45 大概会了 C 性质,然后想了一下正解,发现 C 性质假了。想的是枚举集合 S 表示让恰好 S 能到其他所有点,然后考虑 S 内部强连通的概率以及 S 能到 U 的概率( U 指全集),是 S 到 U 的概率算重了。
发现 S 到全集的概率,可以用 1 减去不合法的概率,不合法等价于存在集合 T 满足 U\backslash T 连通,且不存在 U\backslash T 到 T 的连边,可以 O(3^n) DP 了。直接枚举每个集合做是 O(4^n) 的,可以把贡献一起算,做到 O(3^n) 。写了下发现全对。中间有个很糖的事情是,调半天坚信是写挂了,结果发现模数写错了。
然后感觉搞个倒推就做完了。但是怎么搞不出来啊?
换了个思路,发现 DAG 上一个点 u 能到所有点等价于 u 是唯一的无入度点。那么直接枚举其他无入度强连通分量就做完了,不需要 DP ,还可以复用求强连通时的辅助数组。
然后就想冲 100 ,但感觉有一些很麻烦的地方。用力想,但是一直感觉做不明白。在 11:00 的时候,我做了个决定:如果十分钟内没想出来就去拼暴力以及开 C 。结果是感觉会了,于是赶紧开写。