网络流练习

前言

学了网络流不能只会板 练习开始!
先丢一些理论

二分图匹配

网络流建模初级练习!
一个匹配就是左右的一个点
定义一个超级汇点在左边 向左边的点连一条容量为 1 的边
中间是容量为 1 的边
定义一个超级汇点在右边 向右边的点连一条容量为 1 的边
然后 最大流 = 二分图最大匹配
为什么?容易发现 如果能流一个流量就是一个匹配
时间复杂度 O(nm)

二分图最小点覆盖

这是什么?
要求:在二分图中选点 保证每条边至少有一个端点被选中
难证 过
结论 最小点覆盖 = 最大匹配

二分图最大独立集

要求:在二分图中选最多的点 满足一条边都不被匹配
结论 最大独立集 = n - 最小点覆盖

感性理解
把最小点覆盖以外的点都取了 然后不取最小点覆盖的点即可

DAG 的最小路径覆盖

要求:在一个 DAG 中 用最小的不相交路径覆盖整个图
这个要推
因为是不相交路径
因此 一条路径一定满足路径中每个点入度出度都为 1
特别的 起点入度为 0 终点出度为 0
可以把每个点拆成两个点 然后变成一个二分图 中间连边
容易发现 路径最少 转化为满足 终点最少
因此 转化为左边没被选的点最少
不就是最大匹配问题?
结论 : 最小路径覆盖 = n - 最大匹配

T1
T2
T3

棋盘染色

1. 马形

要求: n×m 的棋盘 要求在棋盘上放最多的马两两不互相攻击
考虑染色 因为马是跳 1×2 的 (不考虑死马脚)
所以 若一个点是 (x,y) 可以考虑 (x+y) 奇偶来分类
可以发现 这样子一定是可以构造二分图
跑二分图最大独立即可
适用范围 :x+y 为奇数
题目

练习1
练习2

2.长脖子鹿形

要求: n×m 的棋盘 要求在棋盘上放最多的长脖子鹿两两不互相攻击(范围 1×3 )
换种方法染色 观察到 1,3 是奇数 所以 它们一定会从偶数行到奇数行或从奇数到偶数行
这样也是跑二分图即可

练习

三匹配 & 多匹配

要求:分别有 n,m,w 个物品 a,b,c 其中 n,m 中的物品有两两可以互相配对 m,w 中的物品有两两可以互相配对
求有多少个匹配 a,b,c
每个物品只能用一次
网络流建模题

b 放在中间 左边是 a 右边是 c 跑网络流

但是有一个问题就是可能一个 b 会匹配很多次
所以要拆点 拆成 b1,b2 即可
T1
T2
T3

posted @   g1ove  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示