A A A
- 发现只需要压黑白开头存不存在为偶数的,若存在,其他偶数边随便选不选这条边的选发是唯一的, d p dp dp 即可, C o d e Code Code
B B B
- 补集转换一下,枚举两个不交的集合,考虑他们向外的连边,强制指向这个集合
对于选定的集合,要统计其联通的方案数,容斥 d p dp dp 即可, C o d e Code Code
C C C
- 性质:最后选出来的一定形如 k , k − 1 , … , 1 k,k-1,\dots,1 k,k−1,…,1,并且后一个是前一个的前缀或后缀,一个后缀若 i i i 合法,则 i − 1 i-1 i−1 也合法
- 基于这个进行
d
p
dp
dp,
d
p
i
dp_i
dpi 表示
i
i
i 的后缀的最大值
二分它的值,考虑转移到一个 j j j,那么需要满足 d p j ≥ m i d − 1 , m a x ( l c p ( i , j ) , l c p ( i + 1 , j ) ) ≥ m i d − 1 , j ≥ i + m i d dp_j\ge mid-1,max(lcp(i,j),lcp(i+1,j))\ge mid-1,j\ge i+mid dpj≥mid−1,max(lcp(i,j),lcp(i+1,j))≥mid−1,j≥i+mid,用主席数维护区间最大值即可
发现有性质 f i ≤ f i + 1 + 1 f_i\le f_{i+1}+1 fi≤fi+1+1,那么不需要二分,可以在均摊 O ( n log n ) O(n\log n) O(nlogn) 的时间解决这个问题, C o d e Code Code
本文探讨了算法竞赛中黑白图边选择策略,通过补集转换与容斥原理解决复杂问题。同时,深入分析了字符串匹配算法,利用主席树优化均摊时间复杂度,实现高效求解。
4820

被折叠的 条评论
为什么被折叠?



