集训总结(五)

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(a+b)=sinacosb+cosasizb \]

\[cos(a+b)=cosacosb-sinasinb \]

于是线段树维护区间 \(sin\)\(cos\) 就结束了。

P5142 区间方差

将方差式子拆开:

\[d=\frac{1}{n}(\sum_{i=1}^na_i^2-2s\sum_{i=1}^{n}a_i+s^2(r-l+1)) \]

其中 \(s\) 指区间平均数。

于是维护区间和,区间平方和,这题就结束了。

posted @ 2025-09-12 22:55  leizepromax  阅读(10)  评论(1)    收藏  举报