集训总结(五)
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\) 的路径即可。
9.13
P4117 order
显然可以转化为最大权闭合子图问题。从源点向每个工作连边权为该工作收入的边,再从该工作向每个工序需要机器连边权为租用机器的边,最后从每个机器向汇点连边权为购买机器的费用,跑最小割即可。
dinic 当前弧优化不要用指针!!!
P6373 IOI计数
线段树班子,维护 \(5\) 个标记 \(i,o,io,oi,ioi\) 分别表示区间内该字符的个数,合并区间时:
\(i=ls.i+rs.i\),
\(o=ls,o+rs.o\),
\(io=ls.io+rs.io+ls.i*rs.o\),
\(oi=ls.oi+rs.oi+ls.o*rs.i\),
\(ioi=ls.ioi+rs.ioi+ls.i*rs.oi+ls.io*rs.i\)。
记得开 \(long\) \(long\)。
9.14
AT_abc417_g Binary Cat
题中的连接方式很像一棵树,于是考虑反向倍增,即倍增跳儿子。
发现一个点的儿子只有两个,于是将两个儿子按 \(siz\) 大小分为重儿子和轻儿子。重儿子倍增,轻儿子单独处理,正确性显然。
复杂度\(O(qloglen)\)。
P6327 区间加区间sin和
通过高一数学知识,可以想到两个式子:
于是线段树维护区间 \(sin\) 和 \(cos\) 就结束了。
P5142 区间方差
将方差式子拆开:
其中 \(s\) 指区间平均数。
于是维护区间和,区间平方和,这题就结束了。

浙公网安备 33010602011771号