志愿者招募
题目链接
https://www.luogu.org/problemnew/show/P3980
题解
这道题很神奇,这种建图方法很有启发性.
我们平时做的题都点都是是一对一的,而这道题的点的对应关系是一对多(即一个志愿者对应一段连续的区间,也就是多个时间点)的,直接按照传统的网络流建图方法来做是不可行的.因此,我们考虑转化一下思维.
考虑从原点出发的一个流量代表一个志愿者,那么一个志愿者可以连续干一段区间意味着这个流量可以跨过一段时间点.因此一个志愿者可以表示为si→ti+1s_i \rightarrow t_i+1si→ti+1的一条容量为infinfinf,费用为cic_ici的边.
第i→i+1i \rightarrow i+1i→i+1天,我们连接一条容量为INF−aiINF-a_iINF−ai,费用为000的边,表示的是免费的志愿者.
这样优先会流的时候会优先选择这样的边流过去,当流量不足的时候,会选择从有费用的边流,表示增添志愿者.