CF 2400~3000 flows 板刷

CF62E World Evil

远古 2700。

给定 n×m 网格图,每条边有容量。令第一列为源点,第 m 列为汇点,求最大流。n5,m105

最大流转最小割,然后状压 DP 即可。dp[i][S] 表示前 i 列阻断了 S 内的行的最小代价。

CF103E Buying Sets

给定 n 个集合,每个集合有属性 ai。题目保证对于任意的 k,任意 k 个集合,它们并的大小 k
求一个集合选法,要求它们的并大小等于选的个数,最大化所选的集合属性之和。


2900,比较有意思的题。

容易想到把集合作为左部点,元素作为右部点,集合向它包含的元素连边。问题转化为给定一张二分图,在左部选若干个点,满足右边被覆盖的点的个数与左边选的个数相等,求最大和。

因为任意 k 个集合的并大小 k,所以如果给每个元素赋权值 ,每个集合赋权值 +,那最优解肯定恰好是集合与元素个数相等。于是转化为最大权闭合子图问题,容易使用网络流解决。

但是这题没完,题解区给出了一种即使不满足任意 k 个集合并的大小 k 的条件也能做的方法。

对于一个左部点集合 S,它合法的条件是 |N(S)|=|S|。而注意到对于两个合法集合 A,BAB 也是合法的。这说明可以求出一个极小合法集合的组,任意合法方案都可以由其中的集合并起来得到。

怎么求这个组?枚举左部点 i,求出最小的包含 i 的合法集合即可。

然后考虑对于 i 怎么求这个最小的合法集合。

求出最大匹配,维护一个集合 S 初始等于 {i}。对于任意边 (u,v),若 uSv 的匹配点 vS,将 v 加入 S。重复操作直到停止,S 即为最小的包含 i 的集合选法。

考虑如何优化这个过程。对于一条非匹配边 (u,v),令 uv 的匹配点 v 连边,则 i 能到达的点集就是 S。连了这些边时候,问题转化为 "给定一张有向图,每个点有权值,选了一个点就要选它的后继。求最大和。",容易用闭合子图模型解决。

posted @   FLY_lai  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示