网络流练习

前言

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

二分图匹配

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

二分图最小点覆盖

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

二分图最大独立集

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

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

DAG 的最小路径覆盖

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

T1
T2
T3

棋盘染色

1. 马形

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

练习1
练习2

2.长脖子鹿形

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

练习

三匹配 & 多匹配

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

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

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

posted @ 2023-09-08 14:12  g1ove  阅读(12)  评论(0编辑  收藏  举报