网络流模型

区间覆盖

[1,n][1,n]mm 个区间 [li,ri][l_i,r_i],代价 wiw_i,个数 cic_i。要求使每个点被覆盖 [aj,bj][a_j,b_j] 次。

用边 ii+1i\to i+1 的流量描述 ii 被覆盖的次数。设总流量 lim=maxbjlim=\max b_j。连边 (li,ri+1,ci,wi)(l_i,r_i+1,c_i,w_i)(j,j+1)(j,j+1) 流量为 [limbj,limaj][lim-b_j,lim-a_j] 费用为 00。每当 ii 被覆盖一次,ii+1i\to i+1 流量就少 11

上下界网络流,如果 bb 都相等,就没有下界变成普通费用流了。

Q7762

给点 w1,wnw_1,\dotsb w_n。有一个长为 mm 的初始全零的序列 aaqq 次请求 kik_i,如果不存在 apos=kia_{pos}=k_i,加 wkiw_{k_i} 代价使一个位置 apos=kia_{pos}=k_i

转换为最多减去多少代价。等价于:对于上一个 kp=kik_p=k_i 的请求 pp,如果 ppii 都一直不动 pp 处取到 kpk_p 的位置,就能减少 wkiw_{k_i} 的代价。即线段 [p+1,i1][p+1,i-1],最后每个点被覆盖 m1\le m-1

Q3304

选择价值最大的一些区间,对区间按包含关系连边,要求不成环。

等价于:没有三个互相相交的区间。即每个点被覆盖 2\le 2 次。

P6967

nn 个小时,睡觉和吃饭价值分别为 sis_ieie_i。要求每 kk 个小时睡 mem_e 和吃 msm_s 小时。

先当做全睡觉,再选一些位置变为吃饭。等价于:把 ii 小时吃饭看成区间 [i,i+k)[i,i+k),对于 iki\ge k 的位置被覆盖 [me,kms][m_e,k-m_s] 次。