最小割总结

转载自: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)=aixi/bixi

poj 2728 Desert King

传送门:poj 2728 Desert King

题意:给你一个无向完全图,每条边i都有两个权值,长度 a[i] ,花费 b[i] ,需要选出其中的一些边构造一颗生成树,生成树需要满足条件: b[i]/a[i] 最小。

思路:二分答案  λ=bixi/aixi ,那么相当于原来每条边的贡献变为了 biaiλ ,利用prime算法

代码:http://paste.ubuntu.com/23050653/


poj 2976 Dropping tests

传送门:poj 2976 Dropping tests

题意:给你长度为n的一对整数a[],b[]根据式子可以得到:∑a[ i ] / ∑b[ i ],现在给你整数k,你可以从n个中剔除k对,问剩下的根据式子能得到的最大值是多少,答案*100并且四舍五入精确到个位。

思路:二分答案,每个点的贡献变为了 aiλbi ,排序之后取最大的n-k个

代码:http://paste.ubuntu.com/23050658/

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相连, 
然后求最小割.最小割单位意义是这条边两端的点的标号是不同的

代码:http://paste.ubuntu.com/23060234/

最大权闭合子图

闭合图的定义:为有向图的一个点集,且该点集的所有出边都还指向该点集。即闭合图内的任意点的任意后继也一定在闭合图中。

构图:在原图点集的基础上增加源s和汇t,将原图每条有向边(u,v)∈E,替换为容量为容量为无穷的有向边;增加连接源s到原图每个正权点v的有向边,容量为w v ,增加连接原图每个负权点v到汇t的有向边,容量为-w v

最大密集子图

poj 3155

传送门:poj 3155 Hard Life


题意: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中的最大值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值