1
区间
k
k
k 覆盖问题
有一些区间,选择一个区间会产生一些收益。要去每个点覆盖它的区间最多不超过
k
k
k 个。
一开始的想法是源点连每个区间代表的点,区间代表的点连向序列里的每个数,每个数连向汇点。发现这样无法限制题目要求,因为选择一个区间实际上对应很多边流量同时+1,网络流并不能处理这种情况,这是典型的“一对多”问题。
尝试更改建图策略,对于一个区间 [ l , r ] [l,r] [l,r],我们连边 l → r + 1 l\rightarrow r+1 l→r+1,流量 1 1 1,费用 k k k, i i i 向 i + 1 i+1 i+1 连流量 INF 费用 0 的边。求 1 到 n n n 流量为 k k k 的最大费用流。实际上是用了 i i i 到 i + 1 i+1 i+1 这条边代表了 i i i 这个数,流一条有费用的边代表选择这个区间。
证明:首先,这样跑出来的方案都是合法的,即不存在一个点被超过 k k k 个区间覆盖。然后,每一种合法方案都能被表示成至多 k k k 组不相交的区间。
2
志愿者招募
有
n
n
n 天需要志愿者,第
i
i
i 天需要
a
i
a_i
ai 名。共有
m
m
m 种志愿者,第
i
i
i 种志愿者可以工作第
s
i
s_i
si 到
t
i
t_i
ti 天,每个人花费
c
i
c_i
ci 元。求最小费用,满足每一天的需求。
这是典型的“一对多”问题。我们尝试用 1 的流量去覆盖 s i s_i si 到 t i t_i ti 天。类似上一题,源点连 1,流 INF 费 0, i i i 向 i + 1 i+1 i+1 连流 INF-ai 费 0, n n n 连汇点流 INF 费 0, s i s_i si 向 t i + 1 t_i+1 ti+1 连流 INF 费 c i c_i ci。流一条 s i s_i si 向 t i + 1 t_i+1 ti+1 的边相当于雇佣了一种这样的人,INF-ai 的边限制了跨国这一天的流量至少为 a i a_i ai。
上面两个问题的共性是“一对多”,解决方法是把一些东西“串成串”,用 1 的流量覆盖一段区间。
3
养猫
你养了一只猫,为了让它快乐地成长,你需要合理地安排它每天的作息时间。假设一天分为 n 个时刻,猫在每个时刻要么是吃东西,要么是睡觉。在第 i 个时刻,假如猫是去吃东西,那么它能获得愉悦值
e
i
e_i
ei,假如是去睡觉,那么能获得的愉悦值为
s
i
s_i
si。
猫要成长,不仅仅需要快乐,还需要健康的作息。经过研究,对于每一个连续的长度为 k k 的作息区间,即所有的时刻区间
[
i
,
i
+
k
−
1
]
,
1
≤
i
≤
n
−
k
+
1
[i, i + k - 1], 1 \leq i \leq n-k+1
[i,i+k−1],1≤i≤n−k+1,猫都要至少有
ms
\text{ms}
ms 的时刻用来睡觉,
me
\text{me}
me 的时刻用来吃东西,这样猫才能健康成长。
现在你想合理地安排一天中的这 n n n 个时刻,使得猫在能健康成长的前提下,获得尽量多的愉悦值。
注意到:给定一个序列,求是否每个长度为 k 的子区间的和都大于某个 M,等价于对于每个数 a_i,把 a i , . . . , a i + k − 1 a_i,...,a_{i+k-1} ai,...,ai+k−1 同时加上 a i a_i ai,最后看是否每个数都大于 M。
显然的想法是先每天都睡觉,然后把某些天改成吃东西。根据上面说的,如果我们改了某一天就把它后面的 k 天+1,那么限制等价于操作完后每一天+1的数量在一个区间里。
我们把天串一串,i向i+k连流量1费用e-s,表示把这一天改为吃东西,覆盖后面k天。i向i+1连k-ms-me,源点连向1流量k-s费用0,n向汇点流量k-s费用0.
在外面跨过 i,i+1 的边的数量就是+了多少1.它的上界由总流量限制,下界由 i,i+1 的流量限制。
4
切糕
n
×
m
n\times m
n×m 的棋盘,每个位置设置一个高度
0
<
h
i
,
j
≤
R
0<h_{i,j}\leq R
0<hi,j≤R,代价为
c
o
s
t
i
,
j
,
h
i
,
j
cost_{i,j,h_{i,j}}
costi,j,hi,j。要求满足每对边相邻的格子高度差的绝对值小于等于一个常数。求最小代价。
这道题建模比较新颖。每个格子只能选择一个高度,因此我们把每个高度建一个点,串一串,割掉
i
i
i 向
i
+
1
i+1
i+1 的边表示选择
i
i
i 这个高度。问题转化成了最小割。考虑相邻高度差的限制,如图:
每个高度
h
h
h 向周围
h
−
D
h-D
h−D 连 INF,这样如果割掉了绿边,那么红边及下面的边是不能选的。
这类问题可以看作有一些变量,每个变量有一些选择。可以把选择与割对应起来,转化成最小割问题。
5
文理分科
班级是一个
n
×
m
n\times m
n×m 的网格图,每个人选文有一定收益,选理有一定收益,一个人和周围的四个人同时选文有一定收益,同时选理有一定收益,求最大收益。
这类题称作“二元关系网络流”,如图:
感觉讲的听清楚。待补。
5
一棵树
m
m
m 对点,每次可以花费
1
1
1 的代价给一条边标记或者给一对点标记。满足每对未标记点的路径上的所有边都被标记。
n
,
m
≤
10000
n,m\leq 10000
n,m≤10000
要么点对被覆盖,要么之间所有边被覆盖。建二分图,左边是点对,右边是边,每个点对向它们之间所有的边。求最小割即可。向树上的一条路径连边,可以倍增或者树剖优化。
6
给定一个由单位正方体组成的物体的俯视图,求最多拿掉多少正方体使得三视图不变。
n
,
m
<
=
100
n,m<=100
n,m<=100