9.12
网络流专题练习(吗?
P3980 志愿者招募
考虑用流量代表剩余人数。初始从 \(s\) 向 \(1\) 号点连一条流量为 \(inf\),边权为 \(0\) 的边,代表初始有无数人;接着从第 \(i\) 天向第 \(i+1\) 天连流量为 \(inf-a_i\) ,边权为 \(0\) 的边,代表第 \(i\) 天占用了 \(a_i\) 个人;最后从第 \(s_i\) 天向第 \(t_i+1\) 天连流量为 \(inf\),边权为 \(c\) 的边,跑最小费用最大流即可。
P2770 航空路线问题
考虑拆点,将每座城市拆成入点和出点。初始入点和出点连一条流量为 \(1\),边权为 \(1\) 的边,代表这座城市只能选一次,选了有 \(1\) 的贡献;对于两座城市 \(x,y\),从城市 \(x\) 的出点向 \(y\) 的入点连一条流量为 \(1\),边权为 \(0\) 的边,最后分别从 \(s\) 向 \(1\) 城市的入点,从 \(n\) 城市的出点向 \(t\) 连一条流量为 \(2\),边权为 \(0\) 的边,跑最大费用最大流。
至于输出方案,来回两遍 \(dfs\),找流量为 \(0\) 的路径即可。