图论建模问题
本文将不定期更新
图论建模
行列二分图
给一个二维平面,建立二分图,左部点编号为横坐标,右部点编号为纵坐标,平面上一个点即为二分图上一条边。
CF1140F Extending Set of Points
建立行列二分图,把每一个点看成一条边,则题述操作会将一个连通块变为完全二分图。使用线段树分治+并查集即可解决问题。
网络流建模
Hall 定理
对于一个二分图,设其左部点集合为 \(S\),右部点集合为 \(T\),边集为 \(E\),设 \(f(V)=\{v\in T\mid\exist u\in V,(u,v)\in E\}\)(即 \(V\) 的邻域),则该二分图最大匹配为 \(|S|-\max(\max\limits_{V\subseteq S}\{|V|-|f(V)|\},0)\)。
证明:
根据最大流最小割定理,设左部点没有匹配的集合为 \(V\),则 \(f(V)\) 均应被割掉,此时的割大小为 \(|S|-|V|+f(V)\),对所有 \(V\) 取 \(\min\),即可得到 \(|S|-\max(\max\limits_{V\subseteq S}\{|V|-|f(V)|\},0)\)。
OIFC NOIP2025集训 北师大实验 Back to Basics
据说有原题,没找到。
做法来自 wchengk09。
设蓝点集合为 \(B\),红点集合为 \(R\),第 \(i\) 行红点数量为 \(row_i\),第 \(i\) 列红点数量为 \(col_i\)。
首先不难想到建立二分图求最大匹配。考虑 Hall 定理,我们要找到一个蓝点集合 \(V\subseteq B\),最大化 \(|V|-|f(V)|\)。若 \((x1,y1),(x1,y2),(x2,y1)\in V\) 且 \((x2,y2)\in B\),则将 \((x2,y2)\) 加入 \(V\) 一定不劣,因此最优的 \(V\) 一定满足存在行集合 \(X\),列集合 \(Y\),使得 \(V=\{(x,y)\in B\mid x\in X,y\in Y\}\)。
考虑固定 \(X\),则所有同行的红点贡献即为 \(\sum\limits_{i\in X}row_i\)。当加入一列 \(j\) 时,答案的变化量为
则对于固定的 \(X\),答案为 \(\sum\limits_{i=1}^n\max(|X|-col_i,0)\)。
注意到上式只与 \(|X|\) 有关,考虑枚举 \(i=|X|\),则答案为
其中 \(sum_i\) 为前 \(i\) 小的 \(row\) 之和,扫描线维护上式即可。
最小割模型
OIFC NOI2023省队集训 三分网络
划分点集问题,想到转最小割。
把原图上点 \(u\) 拆成 \(u\) 和 \(u'\),把原图上边 \((u_i,v_i)\) 拆成 \((u_i,v_i')\) 和 \((v_i,u_i')\),边权均为 \(w_i\)。根据 \(u\) 和 \(u'\) 在割的哪侧可以产生 \(4\) 种状态,不少于我们需要的类数 \(3\)。
考虑最小割 \((S,T)\) 上 \(u\) 和 \(u'\) 所在集合:
- \(u\in S,u'\in T\),令这样的点划分进 \(A\)。
- \(u\in T,u'\in S\),令这样的点划分进 \(B\)。
- 其余情况,令这样的点划分进 \(C\)。
除 \(C-C\) 类边外,其他边都已满足要求。仔细考虑一下,\(C-C\) 类边真的不满足吗?其实也满足要求,因为如果 \(C-C\) 类边产生了 \(2w_i\) 的贡献,必然可以调整使得贡献变为 \(0\)。
连接 \((s,a,+\infty),(a',t,+\infty),(b',t,+\infty),(s,b,+\infty)\),跑最大流即可。

浙公网安备 33010602011771号