P5319 [BJOI2019]奥术神杖
多模式串,先上AC自动机
对ans取一个ln,就可以进行分数规划了
对答案二分,然后就是在AC自动机上dp,
f
i
,
j
f_{i,j}
fi,j表示到了字符串T的第i个位置,在Trie树上的位置为 j 的答案,然后就是简单转移了
代码
P4569 [BJWC2011]禁忌
在AC自动机上dp,设
f
i
,
j
f_{i,j}
fi,j表示前 i 个字符,匹配到Trie上 j 位置的概率。
我们把结尾的tag沿着fail传递下来,dp转移的时候如果下一个位置有tag,那么就是要到0号节点+=当前概率
∗
1
a
l
p
h
a
b
e
t
* \frac{1}{alphabet}
∗alphabet1,且答案加上当前的概率
∗
1
a
l
p
h
a
b
e
t
* \frac{1}{alphabet}
∗alphabet1,没有tag就是直接加上当前概率
∗
1
a
l
p
h
a
b
e
t
* \frac{1}{alphabet}
∗alphabet1
发现长度很大,可以用矩阵快速幂优化dp
代码
P7516 [省选联考 2021 A/B 卷] 图函数
这种很繁琐的计数,可以尝试考虑利用一个状态较少的东西计算贡献
这道题目就可以计算点对的贡献,一个点对(u,v)其中u<v的贡献会在f(u,G)中出现,当且仅当存在一条u->v 和 v->u 的路径,且路径上点的编号均大于u
简单证明,充分性显然,必要性证明:如果存在一个小于u的点k,且有u->k->v 和 v->k->u 的路径,那么u->k 和 k->u 的路径也必然存在,则 k 这个点将被更早地删除
由于删边很难计算,考虑倒着加边,每个点对的贡献一旦成立,会一直持续到最后,所以可以利用前缀和计算,考虑点对正反路径上的最小点值的最大值,那么这个点对会从这个时刻一直贡献到最后
CF863F Almost Permutation
求出每个数的范围,网络流经典技巧,平方拆边
对于n个位置,拆成
a
i
,
b
i
a_i,b_i
ai,bi,S到
a
i
a_i
ai,
b
i
b_i
bi到T建流量为1,费用为0来把凭证n个人都填上数字,对于n个值,拆成
c
i
,
d
i
c_i,d_i
ci,di,对于每个位置的范围
a
i
a_i
ai向
c
j
c_j
cj连(1,0),
d
i
d_i
di向
b
i
b_i
bi连(1,0),最后
c
i
c_i
ci向
d
i
d_i
di连(1,1),(1,3),(1,5)…
P7706 「Wdsr-2.7」文文的摄影布置
线段树简单应用,处理好pushup即可
和那个小白逛公园很像
代码