241112
C. 逃跑
D. 树上最多不相交路径
维护一个大根堆,堆中元素的权值就是i到根节点的距离,然后不断弹出堆顶直到堆顶元素的权值小于l就行了
A 传送门
硬搜索
B 硬币游戏
考虑将 a , b , a a,b,a a,b,a分成两组, a , b a,b a,b和 a a a这样再使用桶排序就可以贪心了
C 序列计数
设 f i f_i fi 表示以 i i i 结尾 且之前没出现过 的子序列个数, l a s v lasv lasv 表示 v v v 上一次出现的位置,则
f i = ∑ j = l a s v i f j f_i = \sum_{j=lasv}^if_j fi=j=lasv∑ifj
前缀和优化即可 O ( n ) O(n) O(n) 完成。
f i , j fi,j fi,j 表示前 i i i 个数构成的以 j j j 结尾的本质不同子序列个数,转移为
f i , j = { f i − 1 , j , s i ≠ j ∑ k f i − 1 , k + 1 , s i = j f_{i,j}=\left\{\begin{matrix} f_{i-1,j},s_i\neq j \\ \sum_k f_{i-1,k}+1,s_i=j \end{matrix}\right. fi,j={fi−1,j,si=j∑kfi−1,k+1,si=j
fi,j={fi−1,j,si≠j∑kfi−1,k+1,si=jfi,j={fi−1,j,si≠j∑kfi−1,k+1,si=j
直接转移的复杂度为 O ( n ∣ σ ∣ ) O(n|\sigma |) O(n∣σ∣),矩阵实现为 O ( n ∣ σ ∣ 3 ) O(n|\sigma |3) O(n∣σ∣3),显然对一般情况矩阵反而会造成负优化。
对于一些特殊的情况,例如转移矩阵周期性变化,就可以用矩阵加速。