P9545 [湖北省选模拟 2023] 环山危路 / road

发布时间 2023-09-19 21:49:30作者: Ender_32k

题意就是给定一个竞赛图,多次询问,每次询问有多个源点 \(s_1,s_2,\cdots s_k\),单个汇点 \(t\),一条边流量为 \(1\),求最大流。

考虑转成最小割,相当于将 \(V\) 划分成两个集合 \(S,T\)\(S\cup T=V\)\(S\cap T=\varnothing\)\(s_i\in S,t\in T\),然后令 \(f(S,T)=\sum\limits_{u\in S}\sum\limits_{v\in T}[(u,v)\in E]\) 最小。

考虑竞赛图的性质,每两个点之间都有连边,所以:

\[\begin{aligned}f(S,T)+f(T,S)&=\sum\limits_{u\in S}\sum\limits_{v\in T}[(u,v)\in E]+[(v,u)\in E]\\&=|S|\cdot |T|\end{aligned} \]

然后再推 \(f(S,T)-f(T,S)\)

\[\begin{aligned}f(S,T)-f(T,S)&=\sum\limits_{u\in S}\sum\limits_{v\in T}[(u,v)\in E]-[(v,u)\in E]\\&=\sum\limits_{u\in S}\left(\sum\limits_{v\in V}[(u,v)\in E]-\sum\limits_{v\in S}[(u,v)\in E]-\sum\limits_{v\in V}[(v,u)\in E]+\sum\limits_{v\in S}[(v,u)\in E]\right)\\&=\sum\limits_{u\in S}\left(\sum\limits_{v\in V}[(u,v)\in E]-[(v,u)\in E]\right)\\&=\sum\limits_{u\in S}out_u-in_u\end{aligned} \]

其中 \(out_u\) 表示 \(u\) 的出度,\(in_u\) 表示 \(u\) 的入度。第二行推第三行是因为考虑一条边的贡献,那么 \(S\) 的导出子图的所有点出入度之差的和显然为 \(0\)

于是能够得到:

\[f(S,T)=\frac{|S|\cdot |T|+\sum\limits_{u\in S}out_u-in_u}{2} \]

由于 \(T=V\setminus S\)

\[f(S,T)=\frac{|S|(n-|S|)+\sum\limits_{u\in S}out_u-in_u}{2} \]

考虑 \(|S|\) 相同时,只需要最小化 \(\sum\limits_{u\in S}out_u-in_u\),那么考虑 \(|S|\) 从小到大的过程,直接按照 \(out_u-in_u\) 从小到大排序然后一个个加入集合 \(S\) 即可。

注意到 \(s_i(1\le i\le k)\in S\) 且强制 \(t\notin S\)

复杂度 \(O(n(n+m))\)