T1. 假期计划
枚举 B, C 就行,预处理前三大的 A / D。时间复杂度 O(nm+n2)。
T2. 策略游戏
按照 B 中是否有正负数分讨即可。
T3. 星战
判断的条件就是每个点出度都为 1。
给每个点随机一个权值 vali,对于每个点 v 维护 sv=∑(u,v)∈Evalu,并维护 ∑sv。每次检查 ∑sv 是否等于 ∑vali 即可。
感觉不稳的话就多随几次。
T4. 数据传输
k=2 的时候中途的点不会跳出 si 到 ti 的链上。矩乘加速是显然的。
k=3 的时候中途的点可能会跳出 si 到 ti 的链上,但是可以发现出去的点一定是这条链某个点的邻居。进一步可以发现,这个点一定是链上某个点所有邻居中点权最小的那个。
还是考虑矩乘加速,先写出朴素转移。设 fi 表示跳到链上第 i 个点的最小时间,gi 表示跳到链上第 i 个点的邻居的最小时间。记 ai 表示链上第 i 个点的点权,bi 表示链上第 i 个点的所有邻居中点权的最小值。
f(i)g(i)=min{j=i−Kmini−1{f(j)},j=i−K+1mini−1{g(j)}}+ai=min{j=i−K−1mini−1{f(j)},j=i−K+2mini−1{g(j)}}+bi
矩阵加速如:
⎣⎢⎢⎢⎢⎢⎡+∞+∞ai+∞+∞0+∞ai+∞bi+∞0ai+∞bi+∞+∞ai+∞+∞+∞+∞ai0bi⎦⎥⎥⎥⎥⎥⎤⋅⎣⎢⎢⎢⎢⎢⎡f(i−3)f(i−2)f(i−1)g(i−2)g(i−1)⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡f(i−2)f(i−1)f(i)g(i−1)g(i)⎦⎥⎥⎥⎥⎥⎤
注意下乘法的顺序,以及 LCA 是否被计算到或算重。