转载自:http://blog.csdn.net/acm_fighting/article/details/52198167
割[T,S]和割[S,T]是不同的
在一个流网络 G=(V,E) 中,设其中任意一个流为 f ,任意一个割为 c[S,T] ,必有 |f|<=c[S,T]
找寻最小割
S
中的点集:先求最大流,再在最大流
f
后的残留网络
Gf
中,从
S
进行DFS,遍历到的点便是
S
中的集合
需要注意的一点是最小割
[S,T]
中的边都是满流边,但满流边不一定是最小割中的边。
0-1分数规划:其解向量 x 满足 ∀xi∈{0,1} .
Minimize λ=f(x)=∑ai∗xi/∑bi∗xi
poj 2728 Desert King
题意:给你一个无向完全图,每条边i都有两个权值,长度 a[i] ,花费 b[i] ,需要选出其中的一些边构造一颗生成树,生成树需要满足条件: ∑b[i]/∑a[i] 最小。
思路:二分答案 λ=∑bi∗xi/∑ai∗xi ,那么相当于原来每条边的贡献变为了 bi−ai∗λ ,利用prime算法
poj 2976 Dropping tests
题意:给你长度为n的一对整数a[],b[]根据式子可以得到:∑a[ i ] / ∑b[ i ],现在给你整数k,你可以从n个中剔除k对,问剩下的根据式子能得到的最大值是多少,答案*100并且四舍五入精确到个位。
思路:二分答案,每个点的贡献变为了 ai−λ∗bi ,排序之后取最大的n-k个
spoj 839 Optimal Marks
传送门:839 Optimal Marks
题意:给你一张无向图G(V,E)。每个顶点都有一个标号,它是一个[0,2^31-1]内的整数。不同的顶点可能会有相同的标号。
对每条边(u,v),我们定义其费用cost(u,v)为u的标号与v的标号的异或值。
现在我们知道一些顶点的标号。你需要确定余下顶点的标号使得所有边的费用和尽可能小。思路:将所有点的标号拆成若干位来看待,那么将已经确定的点的这一位标号为0的那些点和S相连,这一位标号为1的点和T相连,
然后求最小割.最小割单位意义是这条边两端的点的标号是不同的
最大权闭合子图
闭合图的定义:为有向图的一个点集,且该点集的所有出边都还指向该点集。即闭合图内的任意点的任意后继也一定在闭合图中。
构图:在原图点集的基础上增加源s和汇t,将原图每条有向边(u,v)∈E,替换为容量为容量为无穷的有向边;增加连接源s到原图每个正权点v的有向边,容量为w v ,增加连接原图每个负权点v到汇t的有向边,容量为-w v
最大密集子图
poj 3155
题意:ADN公司内部共n个员工,员工之间可能曾经因为小事有了过节,总是闹矛盾.若员工u和员工v有矛盾,用边(u, v)表示,共 m 个矛盾。最近,ADN 公司内部越来越不团结,Amber决定裁员。Amber 想得到一个被裁人员的清单,使得被裁人员间的不团结率最高。不团结率定义为被裁人员间的矛盾总数与被裁人员数的比值(不团结率 = 被裁人员之间的矛盾总数 /被裁人员数)
思路:最大密集子图裸题,每个点想S连流量为U的边,向T连接流量为U+2*g-du的边,du的定义为每个点的度
h(g)=(U*n-C[s,T])/2
h(g)<0 流量太大 g变小
h(g)>0 流量太小 g变大精度的设置:
设任意两个具有不同最大密集子图的图G1,G2,点数分别为n1,n2,边数分别为m1,m2,则
m1/n1-m2/n2=(m1*n2-m2*n1)/(n1*n2)>=1/(n*n)U的设定:du中的最大值