随笔分类 - 图论——网络流
摘要:题意:给你一个n*n的矩阵,然后(0,0)为源点,(n - 1,n - 1)为汇点。点(i,j)可以到达(i + 1,j) (i,j + 1) 花费为a[i][j]。求从(0,0)到(n - 1,n - 1)的最小割。思路:如果按照正常建图,Dinic求最大流会超时,这里要充分利用平面图的性质。然后将其转化为对偶图,然后将求最大流最小割转化为求该图的对偶图最短路问题。详细请参考:http://wenku.baidu.com/view/5a7df375a417866fb84a8e54.html#include <iostream>#include <cstdio>#inc
阅读全文
摘要:http://poj.org/problem?id=1966这里是点连通度的一些介绍:点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1<=k<=N),所得的子图仍然连通,去掉K个顶点后不连通,则称G是K连通图,K称作图G的连通度,记作K(G)。独立轨:A,B是图G(有向无向均可)的两个顶点,我们称为从A到B的两两无公共内顶的轨为独立轨,其最大的条数记作p(A,B)。在上图中有一个具有7个定点的连通图,从顶点1到顶点3有3条独立轨,即p(1,3)=3;1—2—3 , 1—7—3 , 1—6—5—4—3如果分别从这3条独立轨中,每条轨抽出一个内点,在G图中删掉,则图
阅读全文
摘要:http://poj.org/problem?id=2112题意:给出K个挤奶的机器,C个奶牛,以及每个挤奶机器每天最多服务M头奶牛,给出他们的之间的距离。求奶牛到挤奶器处产奶,其满足小于等于M的情况下,最远距离的最小值。思路:不得不说这是一个很好的题目,首先我们看到的是机器每天工作量的限制,让我们联想到流的限制。我们首先二分枚举一个距离,然后建图源点s到挤奶器建边权值为M,奶牛到汇点e建边权值为1.然后枚举奶牛与挤奶器之间的距离,如果小于mid就建立一条权值为1的边,然后求最大流如果小于C继续增加,否则减小。 这里建图之前先用floyd求出任意两点之间的最短距离,这样保证枚举的任意两点距离最
阅读全文
摘要:http://poj.org/problem?id=3155题意:给定一个无向图,求该图的一个子图使得该子图中边/点的权值最大;思路:证明看论文:http://wenku.baidu.com/view/986baf00b52acfc789ebc9a9.html建图方法:把原图中的无向边转换成两条有向边,容量为1;设一源点,连接所有点,容量为U设一汇点,所有点连接汇点,容量为 U+2g-du二分枚举最大密度g,其中du为u的度。U一般取边数即可。//#pragma comment(linker,"/STACK:327680000,327680000")#include <
阅读全文
摘要:http://poj.org/problem?id=2987题意:公司打算裁员,裁掉某些员工可以获得正收益,而裁掉某些员工会遭受损失。并且员工之间往往存在一定的关系,当某个员工被裁掉之后,在他的关系之下的所有员工都必须被裁掉。现在要求如何裁员才能获得最大收益。思路:胡波涛的论文里http://wenku.baidu.com/view/986baf00b52acfc789ebc9a9.html各处了解释,证明的最大权闭合图 = 正权点的和 - 最大割(最大流);关键是如何建图,如果该点的权值为正则由源点向该点建立权值为该点权值的边,如果为负则由该点向汇点建立权值为该点权值的绝对值的边,然后原图中
阅读全文
摘要:http://codeforces.com/problemset/problem/237/E题意:给定一个目标字符串,然后给你n个字符串,从这n个字符串里面s1,s2,...sn,抽出字符组成目标字符串,每个字符串都对应这最多可以抽出a[i]个字符,抽取每个字符都有一定的费用,抽si里面的字符的话,每个字符需要i的钱数,判断目标字符串是否能够从这n个字符串里面抽出字符组成,若可以输出最小的费用,否则输出-1;思路:最小费用最大流。说实话看到这个题目时,真没网网络流方向想,比赛时时间也不够了,赛后一看tags 显示flows 才豁然开朗。 网流的题目关键还是能够看出如何建图,然后直接套模板即可。
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4289题意:有N个城市 M条无向边 有一些恐怖分子要从某一城市到另一城市 打算在某些城市安放一些SA 去抓住他 但若在某个城市安放SA需要一定费用 求一个集合使每个到达终点的路线肯定会经过其中一个点,而这个集合里面每个点都安放了SA,这样就能找到所有的恐怖分子,求该集合使费用最小。思路:网络流的题目做的还太少,对于这类题目还是不太敏感,没想到拆点建图。。。。题目意思是求一个s-t割,求最小的费用肯定要求最小割了,又由于最小割等于最大流,所以我们只要用最大流求解即可,而这里建图是关键,这里将每个点拆成两个点(i
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4292题意:有N个顾客,餐厅里有F中食物,D中饮料。给出每种食物的个数以及每种饮料的个数。还给出两个关系矩阵N*F 和N*D Y表示第i个人对于第j个食物或者饮料是满意的,求出该餐厅能使顾客满意的最多人数。思路:这里我们主要是保持每个人能够拿到自己满意的一份食物和一瓶饮料,(注意每个人只能那一份食物和饮料). Food ------ Peole ------- Drink 按这样的思路只要给出一个最大流即可,但是我们要保持每个人只拿到一份食物与饮料所以要将n个点拆成2*n个点每一对加权值为1,其余的就是给出.
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4280题意:给定平面上n个点的坐标,最左边的点为源点,最右边的点为汇点,给出m条边的容量求最大流。思路:才开始理解错了题意,For safety, no two routes are cross or overlap and no routes will pass an island except the departing island and the arriving island。以为要处理线段不能相交什么的,不知道怎么做了。原来直接见图套模板即可,题目保证不会相交。为此我和von纠结了好久。。View
阅读全文
摘要:http://poj.org/problem?id=3308题意:火星人要和地球人PK,地球人间谍搞到了一份情报:火星人要搞伞兵,登陆在地球一个row*col的地图上,而且知道伞兵的数量和每个伞兵要降落的格子。为了消灭敌人,可以在某一行或者某一列安置激光枪。每个激光枪可以瞬间消灭这一行(或者列)的敌人。安装消灭第i行的激光枪消费是ri。安装消灭第j行的激光枪消费是ci。现在总部要你花费最小的费用,安装好足够的激光枪去消灭所有的火星人,问最小的花费是多少。这里花费的定义有点不同:是每个激光器消费的乘积。思路:最小割_最大流,把伞兵看成边,行列看成节点,转化为了带权二分图最小点覆盖。加入超级源点和
阅读全文
摘要:http://poj.org/problem?id=3422/*题意:给定一个n*n的矩形方格,要求从(1,1)出发,只能往右下角走,(i + 1,j) 或者 (i + n,j)每次走完将格子里面的数累加,并将所走过的格子里面的数置零,问走k能得到的最大的数:*//*网络流的题目建图是关键,这道题目建图很难想啊!首先要拆点。这里将一个点拆分成两个点,建立两条边,一条变得流量为1,权值为 map[i][j],另一条则是流量为无穷,权值为0了。注意这条边是为了保证在走过该店后,map[i][j]为0后,还能继续走因为它有流量且权值为0. 还有就是往右下角走建立流量为无穷权值为0的边。最后要建立的就
阅读全文
摘要:http://poj.org/problem?id=2195题意是:有相同数量的人与房子,每一时刻人都可以花费1$的钱走一步,问让每个人到达一个屋子的最少需要的费用。建立源点与汇点,求有源点到汇点的最小费用最大流;改了一下不需要f[][]的模板。#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cstdlib>#define maxn 207using namespace std;const int inf = 9999999
阅读全文
摘要:http://poj.org/problem?id=2516刚接触,所以这道题目整了一天的时间,囧!!题意描述也很难理解:n个店主,要从Dearboy的m个仓库里进k中商品。首先给出n个店主对k种的商品的需求量,然后给出Dearboy的m个仓库中分别存放k中货物的数量。最后给出的是从m个仓库输送k种商品到n个店主的费用。由以上约束条件建立约束图,利用mcmf算法求解。。。#include <iostream>#include <cstring>#include <cstdio>#include <queue>#define maxn 107usi
阅读全文
摘要:http://poj.org/problem?id=3436题意好难懂,有n个工厂加工电脑半成品,半成品电脑需要p个部件。输入p(需要的部件数) n(工厂数)Qi (工厂最大生产量) Si,1Si,2...Si,P (s表示在工厂i声场必须满足的条件1必须已经有了,0可以没有,2可以有,也可以没有)Di,1Di,2...Di,P,(经过i厂生产之后,所满足的条件1有,0木有)题目建图不好了理解,建完图后就是套最大流模板的问题了。。。首先构建网络图,一台电脑在进入生产线之前各部分的零件状态肯定全为0,离开生产线时,各部分的零件状态肯定全为1.所以源点与输入状态全为0的机器相连,输出状态全为1机器
阅读全文
摘要:http://poj.org/problem?id=1459才开始套自己的那个模板就是过不了一直TLE,最后看了别人过得修改了一下自己的模板最后1391s险过。。。本题是一个多源点,多汇点问题,建立超级源点与汇点,然后套用模板求解。。EK O(V*E^2)View Code #include<iostream>#include<queue>#include<cstdio>#include<cstring>using namespace std;const int inf=100000000;const int maxn=105;int map[m
阅读全文