模拟29 题解

A. 壕游戏

不会做,以为是贪心。

结果发现贪心是错的。

 

正解是网络流中的费用流。

将每条边$i$拆为$c_i$条边,

将所有边建出来,每条边的费用为$a_i*j+b_i$,$1<=j<=c_i$。

然后可以直接跑费用流。然而复杂度$O(mk^2)=O(跑不过)$,死了。

考虑优化一下。

考虑到实际上并不需要这么多边,因为起点的流量最多为1,

且在网络流中,每个点在一条增广路中只会出现一次。

每一条边直接被拆为$c_i$条边是没有意义的。

只在边$i$的第$j$个副本被需要的时候,也就是前面的$j-1$个副本都被使用完的时候,新建这条边。

每条增广路上最多有n个点,也就是最多拓展n条边。

总复杂度$O(\sum \limits_{i=1}^{k}K*(m+i*n))=O(K(mk+nk^2))$,

K为spfa的常数。

加上网络流的玄学复杂度,它变为了$O(跑得过)$。

 

 

 

B. 密码

当只有一个匹配串,就是简单的数位dp。

对于多个匹配串该怎么处理?

考虑字符串匹配,对于同一模式串,多匹配串的处理方式。

AC自动机。

然后就完了。

设$dp(i,j,v)$表示到计算到第i位,符合当前匹配状态的AC自动机上节点编号为j,已经匹配到了v个密钥。

当v大于k时,直接设为k。

照例计算r的方案减去l的方案。

 

 

 

C. 大新闻

区间K大

第一眼是数状数组套权值线段树。

看了一会发现维护的是一个只在边界修改

主席树裸题。

posted @ 2019-08-22 17:19  skyh  阅读(177)  评论(0编辑  收藏  举报