割边最少的最小割求法两种(仅结论)

我太弱了,所以只贴上结论,省略(不会)证明。

求法一:

1.求出原网络的最大流.

2.把可能的关键割边(即满流的边)容量置为 1,其余边容量置为 0.

3.求出修改后网络的最大流.

此时的最大流即是最小割时最少的割边数。

总共求了 2 次最大流。

更好的求法二:

以下用 E 表示网络流中的边数.

1.建图时,把每条边的边权 w 置为 w * (E + 1) + 1.

2.求出修改后网络的最大流 flow_max.

此时原图的最大流为 flow_max / (E + 1) ,最少的割边数为 flow_max mod (E + 1).

总共只求了 1 次最大流。

时间: 2024-08-28 01:01:27

割边最少的最小割求法两种(仅结论)的相关文章

hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割

view code//hdu 3987 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; typedef long long ll; const ll INF = 1LL<<59; const ll E = 100001; const int N = 10

HDU3987 Harry Potter and the Forbidden Forest(边数最少的最小割)

方法1:两遍最大流.一遍最大流后,把满流边容量+1,非满流边改为INF:再求最小割即为答案. 我大概想了下证明:能构成最小割的边在第一次跑最大流时都满流,然后按那样改变边容量再求一次最小割,就相当于再在那些 满流可能是属于最小割的边 中挑出最少的边形成ST割. 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std

HDU 3987 Harry Potter and the Forbidden Forest(最小割中的最少割边)经典

Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1791    Accepted Submission(s): 596 Problem Description Harry Potter notices some Death Eaters try to slip

洛谷 P2057 善意的投票(网络流最小割)

P2057 善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可以投和自己本来意愿相反的票.我们定义一次投票的冲突数为好朋友之间发生冲突的总数加上和所有和自己本来意愿发生冲突的人数. 我们的问题就是,每位小朋友应该怎样投票,才能使冲突数最小? 输入输出格式 输入格式: 文件的第一行只有两个整数n,m,保证有2≤n≤300,1≤m≤n(n-1)/2.其中

Harry Potter and the Forbidden Forest(割边最小的最小割)

Harry Potter and the Forbidden Forest Time Limit:3000MS    Memory Limit:65536KB    64bit IO Format:%I64d & %I64u Description Harry Potter notices some Death Eaters try to slip into Castle. The Death Eaters hide in the most depths of Forbidden Forest.

HDU 6214 Smallest Minimum Cut 最小割,权值编码

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6214 题意:求边数最小的割. 解法: 建边的时候每条边权 w = w * (E + 1) + 1; 这样得到最大流 maxflow / (E + 1) ,最少割边数 maxflow % (E + 1) 道理很简单,如果原先两类割边都是最小割,那么求出的最大流相等 但边权变换后只有边数小的才是最小割了 乘(E+1)是为了保证边数叠加后依然是余数,不至于影响求最小割的结果 因为假设最小割=k,那么现在新

关于最小割的进一步理解

以前只知道最小割就是最大流...网络流背个模板,没了 根本没有深入理解,最近写了一些题才知道自己很 $naive$ 废话不多说,开始正题(假设大家都会网络流的代码,并且知道网络流在做什么) 首先最小割就是最大流(废话) 一条图的最小割中,一定有一些边,它们是满流的(如果不满流就不是最大流了) 不妨把这些边称作割边,显然,这些割边把图分成两个部分,一个与源点 $S$ 在同一个部分,一个与汇点 $T$在同一个部分 放图理解: 首先原图长这样: 然后一种最小割长这样(红色的是满流的边): 我们把与 $

【bzoj2127】happiness 网络流最小割

题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值.作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的喜悦值总和最大. 输入 第一行两个正整数n,m.接下来是六个矩阵第一个矩阵为n行m列 此矩阵的第i行第j列的数字表示座位在第i行第j列的同学选择文科获得的喜悦值.第二个矩阵为n行m列 此矩阵的第i行

分治最小割 学习总结

这是一种可以较快的求解任意两点间最小割的算法 正常的暴力的话我们要枚举点对,一共要做O(n^2)次网络流 而我们注意到设某一个S->T最小割中两个点x,y,满足x在S集合且y在T集合中 设S->T的最小割为C,x->y的最小割为W 则一定有C>=W 若取得大于号,则x->y的最小割中一定有一个属于S集合点现在属于y集合或者一个属于T集合的点现在属于x集合 这样我们就可以分治处理并每次更新答案 实际上这样操作构成了一棵树,我们称之为最小割树,其任意两点的最小割等价于两点在树上路