最大密度子图
最大密度子图
参考
无向图 \(G(V,E)\) 的密度 \(D = \dfrac {|E|} {|V|}\)
若选择了边 \((u,v)\) 则必须有 \(u \in V , v \in V\)
最大密度子图
具有最大密度的子图,最大化 \(D' = \dfrac {|E'|} {|V'|}\)
根据之前的分数规划
可以二分答案
并且有如下引理
- 任意两个子图的密度差 \(\ge \dfrac 1{n^2}\)
\(\dfrac {m_1}{n_1} - \dfrac {m_2}{n_2} = \dfrac {m_1n_2 - m_2n_1} {n_1n_2} \ge \dfrac 1 {n_1n_2} \ge \dfrac 1 {n^2}\)
现在的主要问题是如何 \(Judge\)
设要检验的值为 \(g\) , 构造函数 $f = |E| - g|V| $ , 现在的目标是使得 \(f\) 最大
有两种方法
1. 最大权闭合子图
目标:
最大化 \(f = |E| - g|V|\)
把无向边 \((u,v)\) 看做一个点连接两条有向边指向 \(u\) 和 \(v\) 原图的点权值设为 \(-g\) ,
边的点为 \(1\) ,这样就转成了最大权闭合子图的问题
2.优化算法(诱导子图最小割)
对于点集 \(V'\) , 显然能选的边要尽可能的都选上
所有能选的边为 \(V'\) 中点的度的和减去割 \([V',\overline{V'}]\) 的容量的一半
按如下建图, \(U\) 是一个大常数,保证边权不是负数
割 \([S,T]\) , \(S = {s} + V'\) ,\(T = {t} + \overline{V'}\)
割的容量 \(c[S,T]\) 有四个部分
\(s\to t\) : \(0\)
\(s \to \overline{V'}\) : \(\sum_{v \in \overline{V'}}U\)
\(V' \to \overline{V'}\) : 其实就是 \(c[V',\overline{V'}]\)
\(V' \to t\) : \(\sum_{v\in V'}U+2g-d_v\)
所以最大化 \(f\) 即最小化 \(c[S,T]\) ,求最小割就可以了