#include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> using namespace std; #define eps 1e-6 #define inf 0x3fffffff #define N 410 struct node { int u,v,next; double w; }bian[N*4],f[N]; int yo…
/* 最大密集子图子图裸题 解法:设源点s和汇点t 根据胡波涛的<最小割模型在信息学中的应用> s-每个点,权值为原边权和m, 每个点-t,权值为m+2*g-degree[i], 原来的边u-v ,权值为原权值 最小割f; flow=m*n-f; 二分g得到flow 逼近0: */ #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include&l…
/* 参考博文:http://www.cnblogs.com/ylfdrib/archive/2010/09/01/1814478.html 以下题解为转载代码自己写的: zoj2676 胡伯涛论文<最小割模型在信息学竞赛中的应用>中详细介绍了分数规划思想的应用.经典的有最优比率生成树. 对于分数规划的应用中,常用的就是0-1分数规划,即解向量X = {x1, --,xi, --}, 对于∀xi∈{0,1}. 主要求解过程是,首先将原分式优化问题,转换成非分式优化问题,利用单调的性质,用二分逼…
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路  1:(x,y)<==>(x+1,y)  2:(x,y)<==>(x,y+1)  3:(x,y)<==>(x+1,y+1)…
意甲冠军: 一m*n该网络的规模格.详细地点称为伞兵着陆(行和列). 现在,在一排(或列) 安装激光枪,激光枪可以杀死线(或塔)所有伞兵.在第一i安装一排 费用是Ri.在第i列安装的费用是Ci. 要安装整个激光枪系统,总费用为这些 激光枪费用的乘积. 求杀死全部伞兵的最小费用. 构图: 把伞兵视为边,行与列视为顶点.添加源点和汇点,对于第i行.从源点向顶点i连接一条 容量为Ri的边.对于第j列.从顶点j向汇点连接一条容量为Rj的边. 假设某一点(i,j)有伞兵降落,则从顶点Ri向顶点Cj连接一条…
原问题等价于断掉一些边,让原来所有的最短路全都无法联通S和T. 先求最短路,然后把在最短路上的边(dis[u[i]]+w[i]==dis[v[i]])加入新图里,跑最小割.显然. 注意是无向图. #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; #define INF 2147483647 #define MAXN 511 #…
http://acm.hdu.edu.cn/showproblem.php?pid=3046 题意: 给出矩阵地图和羊和狼的位置,求至少需要建多少栅栏,使得狼不能到达羊. 思路:狼和羊不能到达,最小割最大流问题. 因为狼和羊都有多只,所以我们加一个超级源点和一个超级汇点,将每只狼与超级源点相连,容量为INF,将每只羊与超级汇点相连,容量为INF.对于地图上的点,每个点都与它上下左右相连,容量设为1. 接下来,我们只需要计算出从超级源点到超级汇点的最大流,因为最小割等于最大流. #include<…
题意:有一个技能学习表,是一个DAG,要想正常学习到技能x,要将指向x的技能全部先学到,然后会有一个正常花费cx.然后你还有一种方案,通过氪金dx直接获得技能x.你还可以通过一定的代价,切断一条边.问你学得指定的技能N的最小代价. 源点向每个点连接代价为cx的边,每个点拆点,内部连接代价为dx的边,然后N向汇点连接代价为无穷的边,然后每条原图中的边的容量为切断其的代价. 容易发现,每一个割集的方案恰好对应一种学习到N的所需代价的方案.所以直接跑最小割即可. #include<cstdio> #…
题意:方格内有些位置是水域,有些位置是陆地,有些位置是被云彩遮挡住了:让你自己规定被云彩遮挡住的地方是陆地还是水域,使得陆地个数最多.(均为四连通块) 显然与陆地邻接的云彩填成水比较优.其他云彩格子填陆地只填大小为1的即可. 然后剩下的云彩黑白染色,S往黑色连1的边,白色往T连1的边,黑色往与其邻接的白色且为云彩的格子连INF的边,跑最小割.答案就是云彩格子数-最小割+一开始就有的陆地块数. 最小割就是保证了水域数量最少,而陆地格子一定不相连. #include<cstdio> #includ…
每个点拆点,分别向源/汇连a[i]的边,满足条件的相互连INF的边,答案为sum-maxflow*2. 因为若有几个点不能同时被选,我们要贪心地选择其中和尽量大的部分,这可以由最小割来保证. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> using namespace std; #define INF 214748364…
模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各种模型,不过我大概花了2个星期才把它弄懂...最小密度路径的改进算法那一块的推导前面部分有些问题,但后面是对的,结论也是对的,蛋疼了好久.. 相关题目: 1.太空飞行计划(网络流24题) 题目大意: 有一些实验和仪器,做每个实验有相应的报酬,但是需要买好相应的仪器(多个实验可以共用),仪器需要相应的钱.求最大…
https://vjudge.net/problem/UVA-1660 题意:给出一个无向图,求出点连通度.即最少删除多少个点,使得图不连通. 思路: 如果求线连通度的话,直接求个最大流就可以了.但这题我们删除的是点,用拆点法来使点具有流量的性质,把每个点都拆分为两个点,容量为1,表示可以使用一次.然后,题目中给出的连通的点之间的容量设为INF,因为我们不是要删除这两点之间的线. 最后,我们固定一个源点,枚举汇点,找到最小的删除数. #include<iostream> #include<…
http://blog.csdn.net/lxy767087094/article/details/68942422 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int dx[]={0,-1,0,1},dy[]={-1,0,1,0}; typedef long long ll; const ll INF=10…
结论: 满足条件一:当一条边的起点和终点不在 残量网络的 一个强联通分量中.且满流. 满足条件二:当一条边的起点和终点分别在 S 和 T 的强联通分量中.且满流.. 网上题解很多的. #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<queue> using namespace std; #define INF 2147483647 #…
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f;int cnt=1;//边的数量int head[110],cur[110];//head记录每一个点最后一条边的编号,cur记录当前点循环到了哪一条边int n,deep[110],s,t,start;//s设为不选,t为选,即源点和汇点//权值为负的点向s连容量为-w的边,权值为正的点向t连容量为w的边//这里的容量…
Friendship Time Limit: 2000MS   Memory Limit: 20000K Total Submissions: 8025   Accepted: 2224 Description In modern society, each person has his own friends. Since all the people are very busy, they communicate with each other only by phone. You can…
虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> #include<iostream> #include<algorithm> #define ll long long using namespace std; #define REP( i , a , b ) for ( int i = a ; i < b ; ++ i ) #d…
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路  1:(x,y)<==>(x+1,y)  2:(x,y)<==>(x,y+1)  3:(x,y)<==>(x+1,y+1)  道路上的权值表示这条路上最多能够通过的兔子…
传送门:Sabotage 题意:给定多个城市的网络,每个城市之间的通信有花费,要求使得首都和最大城市之间的通信断掉的最小花费.要求输出任意一组砸掉的边. 分析:跑一遍最大流dinic后,根据最小割定理,整部图被分为S,T两部分,从源点出发dfs得到S集的点,剩下的为T集的点,然后输出左右两边各一个连着的点就是割边. #pragma comment(linker,"/STACK:1024000000,1024000000") #include <cstdio> #includ…
http://acm.hdu.edu.cn/showproblem.php?pid=3526 题意:有个屌丝要配置电脑,现在有n个配件需要购买,有两家公司出售这n个配件,还有m个条件是如果配件x和配件y在不同公司买的话,需要花费额外的w元.现在需要计算购买这n个配件的最小花费. 思路: 一开始想的费用流,但好像不太行?? 其实一看到二选一的话就首先应该往最小割和二分图这个方向去想一想的. 这题用最小割来做,对于这m条件,在这两个顶点之间加两条有向边. #include<iostream> #i…
题意 给出一个R*C大小的网格,网格上面放了一些目标.可以在网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标.你的任务是计算最少需要多少子弹,各从哪些位置发射,才能把所有目标全部打掉. 分析 啊!原来这个模型叫 最小覆盖模型啊!难道不是最小割直接做嘛?? 二分图最小覆盖:既选择尽量少的点,使得每条边至少有一个端点被选中.可以证明,最小覆盖数等于最大匹配数. 本题的建模方法: 将每一行看作一个X结点,每一列看作一个Y结点,每个目标对应一条边.这样,子弹打掉左右的目标意味…
题面: [ZJOI2011]最小割 [CQOI2016]不同的最小割 题解: 其实这两道是同一道题.... 最小割是用的dinic,不同的最小割是用的isap 其实都是分治求最小割 简单讲讲思路吧 就是首先全部的点都在一个集合里,然后随意定两个点为s和t,这里默认是第一个和最后一个. 然后找到最小割,最小割将整张图分为了s集和t集,于是我们再用这个最小割更新跨集合点对之间的最小割. 这个很好理解,因为当前找到的最小割将s集和t集分开了,显然对于任意一组跨集合的点对而言,当前最小割都是一个可能的最…
传送门 我们可以把实验放在左边,仪器放在右边,点有点权,然后连对应的有向边,就是求一个最大权闭合图,可以转化为最小割来做(关于这具体是个啥……可以百度胡伯涛<最小割模型在信息学竞赛中的应用>) 总而言之,就是求一个图,每一个点有点权,闭合图就是若图中有点$u$,且原图中存在边$(u,v)$,那么点$v$也在图中.然后求一个最大权的闭合图即可(具体证明看上面).最大权闭合图可以转化成下面那样建图之后求最小割 源点向所有实验连边,容量为收益,实验向对应仪器连边,容量为$inf$,仪器向汇点连边,容…
传送门 这题是用最小割树做的(不明白最小割树是什么的可以去看看这一题->这里) 有了最小割树就很简单了……点数那么少……每次跑出一个最大流就暴力搞一遍就好了 //minamoto #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define inf 0x3f3f3f3f using namespace std…
题目 给出一个 $n$ 个顶点 $m$ 条边的图,要求阻塞一些边,使得从 $1$ 到 $n$ 的最短路变长,求阻塞的边长度和的最小值,不必保证阻塞后可达. 分析 很显然,要阻塞的边肯定在最短路图上,先跑一遍单源最短路,求出最短路图. 要使最短路变长,肯定要同时切断原有的所有最短路,又要是长度(相当于流量)和最小,很容易想到就是求最小割. 简而言之,就是在最短路图上求最小割. 两个模板拼起来就好了(难得写抄这么长的能一遍AC) #include<bits/stdc++.h> using name…
Descrption A,B两个国家正在交战,其中A国的物资运输网中有N个中转站,M条单向道路.设其中第i (1≤i≤M)条道路连接了vi,ui两个中转站,那么中转站vi可以通过该道路到达ui中转站,如果切断这条道路,需要代价ci.现在B国想找出一个路径切断方案,使中转站s不能到达中转站t,并且切断路径的代价之和最小. 小可可一眼就看出,这是一个求最小割的问题.但爱思考的小可可并不局限于此.现在他对每条单向道路提出两个问题: 问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:…
3894: 文理分科 题目:传送门 感谢波老师没有来D飞我,让我做出了这题... 题解: 这题其实和我做的上一题(bzoj2132)很像,所以就不写题意了. 依然是那最小割... 这题给出了四个利益矩阵,看似比上一题复杂,想了很久,发现其实建图没有我想象的麻烦. 首先复习一下最小割的定义:把原图分为两个不相交的子集(st和ed) 那么这题用最小割来做的话,我们就把st当成文科的子集,ed为理科. 对于任意的一个x点 st到x连一条流量为文科利益的边,x到ed连一条流量为理科利益的边 那么另外两个…
Network Wars Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special Judge Network of Byteland consists of n servers, connected by m optical cables. Each cable connects two servers and can transmit data in both directions. Two servers of the n…
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms 2.24MB #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN 300000 #d…
妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Time Limit: 2000MS Memory Limit: 20000K Description In modern society, each person has his own friends. Since all the people are very busy, they communic…