CF1528
A
可以发现答案只会在 (L_i/R_i) 处取到。
B
可以发现递推式:(f_i=S_{i-1}+d_i)
C
对第一棵树 dfs,在第二棵树上贪心:能加入则加入,否则去替换其一个祖先。
D
假设能够在时刻 (i) 访问 (v),那么可以在时刻 (i+t) 访问 (v+tmod n),枚举起点,然后跑一个 (mathcal O(n^2)) 的 dij 即可,这里计算某个点的最小出边需要单独处理一下。
E
可以发现答案只有 3 类:外向树,内向树,一个外向树和内向树拼在一起。
第一类和第二类的主体是每个点儿子数不超过 (2) 的外向树方案数:转移由 burnside 定理给出:(f_i=f_{i-1}+frac{1}{2}(S_{i-1}^2-S_{i-2}^2+f_{i-1}))
计算答案的时候和烷烃计数一致,枚举 (3) 种情况转移即可,乘以 (frac{1}{6})(由于根节点的 deg 可能为 (3))
外向树和内向树拼起来的时候,可以发现有多个点可以作为分界点,但合法的方案一定满足内向树的部分根节点度数为 (2),且外向的边的度数为 (1),这个部分的贡献为 ((f_{i}-f_{i-1})(f_{n-i-1}-1))(减去单独一条链的情况)
F
我们构造一个长度为 (n) 的序列(一排座位),对于每个 (a_i),令第 (i) 个人走到 (a_i),然后往后移动至第一个空座位。(CF838D)
我们可以发现这样的一个策略和一个合法的序列是双射,添加一个辅助节点,并连接成一个环,可以发现只要 (n+1) 为空就有合法的方案,因此答案为 ((n+1)^{n-1})
接下来我们有一个重要观察:任意一个非法的方案都可以映射到一个合法的方案。
这是因为对于任意一个非法的方案,设 (x) 为其抵达的空位置,则令 (a_ileftarrow (a_i+(n+1)-x)mod (n+1)+1) 可以实现将其逆时针旋转 (x) 位的结果。
换而言之,我们直接对 (a_iin [1,n+1]) 的序列进行计数,然后将答案乘以 (frac{1}{n+1}) 即为答案。
现在,问题已经相当明朗了,答案就是: