网络流
文章平均质量分 77
菜鸟起航
这个作者很懒,什么都没留下…
展开
-
hdu 3996 (最大权闭合图)
题意:有n个区域布局,每个区域有一些金矿,挖开金矿需要一定的费用,可以得到一定的利润,要想挖开一个金矿,必须挖开所有在这个金矿上边的金矿,求最大利益,给的数据价值太大,用64位。分析:如果一个金矿可以获利,就从源点引一条边,容量为获得的利益,否则向汇点引一条边,容量为损耗,一个金矿向所有的必须在它之前开发的金矿连边,容量为无穷大。求出最大流就是最小损耗,,,原创 2013-08-19 15:35:37 · 707 阅读 · 0 评论 -
poj 3422 (费用流)
从左上角到有下角k次能获得的最大值。跟hdu 2686一样的题目,这题一个点可以重复走,只能得到一次值。#include#include#includeconst int N=5100;const int inf=0x3fffffff;using namespace std;int dist[N],head[N],num,start,end,n,原创 2013-08-14 23:26:09 · 640 阅读 · 0 评论 -
hdu 2686&&hdu 3376 (费用流,巧妙的建图)
开始就想着要拆点,i与i‘连边容量为2,费用为矩阵中的值,但是一想就不对了,如果这样的话,每个点可以走两次,每次的费用都是一样的,应该有一次为0才对,所以应该加两条边,容量都是1,一条边的费用为0。然后往左,下连边,,,跑费用流,求出最大的费用。。。hdu 3376 数据开大些就可以了,N=720010#include#include#i原创 2013-08-14 18:47:31 · 786 阅读 · 0 评论 -
hdu 3667 (费用流,拆边)
刚开始没想着拆边,写完了连实例都过不了,仔细想了一下,如过直接做的话,会选择一条路,增加的流量是最小边的满流,而不去其余的路,这样就不对了,费用是跟流量的平方相关的。每条边的流量最大是五,拆成五条边还是可以的,,不过拆边后每条边的费用怎么算困扰我一天多,如果拆的几条边分别对应第几次走的话,第一次就是a*1*1,如果该路上流量为2的话,总费用就是a*2*2,所以第二次走费用就是a*2*2-a*1*1原创 2013-08-15 18:42:19 · 894 阅读 · 0 评论 -
hdu 1565&&hdu 1569 (最大点权独立集)
题目意思很明确就是选一些没有相连的数字,使和最大,建成二分图后求最大点权独立集,,#include#includeconst int N=2510;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,end,ans;struct edge{ int ed,flow,next;}原创 2013-08-16 17:13:09 · 780 阅读 · 0 评论 -
zoj 3165 (最小割,最大点权独立集)
胡伯涛的《最小割模型在信息学竞赛中的应用》写的真牛。这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二分匹配里的最大独立集,但是要求选出的点的权值最大,就是最小割模型里的最大点权独立集了,最大点权独立集+最小点权覆盖集=图的总权值,这里跟二分匹配一样求出最小点权覆盖就可以,求出最小割后,从原点深搜,流量>0原创 2013-08-16 15:55:01 · 873 阅读 · 0 评论 -
hdu 3879 (最大权闭合图)
题意:金典的最大获利问题,通信公司可以在n个地方建立信号站,每个信号站的建立要一定的费用,有m个要求,每个要求是如果两个地方都建立了信号站就会获利,求出公司的最大获利。建图:获利边的选择要依赖点。源点跟边相连容量为边的获利,每个点跟汇点相连,容量为费用,每条边跟依赖的两个点相连,容量为无穷大,求出的最大流就是最小费用,,#include#includeconst原创 2013-08-18 22:01:13 · 793 阅读 · 0 评论 -
hdu 3061 (最大权闭合图)
分析:城池之间有依赖关系,汇点与能获得兵力的城池连接,容量为可以获得的兵力,损耗兵力的城池与汇点连接容量为损耗的兵力,有依赖关系的城池间连边,容量为无穷大,跑网络流求出的最小割就是损耗的最小兵力,,,#include#includeconst int N=510;const int inf=0x3fffffff;int dis[N],gap[N]原创 2013-08-18 22:23:04 · 763 阅读 · 0 评论 -
hdu 3917 (最大权闭合图)
题意:政府有一些路,m个公司来修,每个公司修路要交税给政府,修路政府要付给公司费用,求政府能获得的最大利润,如果选择一个公司负责一个项目,那么该公司负责的其它项目也必须由他负责,并且与其有相连关系的公司也必须选择。。建图:利润=所有公司的税收-(未选择的公司的税收+选择公司的补助),后两项之和最小的情况利润才会最大,汇点连接公司容量为公司的税收,公司与汇点相连容量为给该公司的补助,公司间有依赖原创 2013-08-18 20:19:16 · 729 阅读 · 0 评论 -
poj 3436 (最大流)
题意:每台电脑共有p种零件,现在有n台机器,给出n台机器每台需要的一些种类零件当原料(0代表不需要,1代表必须要,2代表 可有可无)和输出的产品零件。问怎么安排生产线使生产出来零件可以组装的电脑最多。思路:如果机器的原材料什么都不需要的话就可以当源点,如果机器输出的零件种类为p就可以当汇点。刚开始想复杂了(1 0 1 可 以同时跟1 0 0和0原创 2013-09-19 21:14:14 · 872 阅读 · 0 评论 -
poj 2516 (费用流)
题意:有N个供应商,M个店主,K种物品。每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商m送第k种货物的单位数量到店主n手上所需的单位花费。供应是否满足需求?如果满足,最小运费是多少?思路:这题一读完就知道是费用流了,刚开始想着拆点,不过算了一下,把m个供应商拆成m*k个点,n个店主拆成n*k个点,原创 2013-09-19 23:07:44 · 903 阅读 · 0 评论 -
poj 1966 (最小割点集)
题意:一个网络的安全系数是最少删除几个点后使得剩下的图不连通,给出一个无向图,求出该网络的安全系数。思路:看了最小割模型论文,最小割点集就是把点分成两部分,一部分跟源点相连,一部分与汇点相连,这题就是求出最小割集,但是没有源点和汇点,要枚举。原图的每条边的流量为inf,因为经过一个点的流量为1,所以要拆点,i->i'的流量为1,求出最小的最大流就可以了。原创 2013-09-24 23:05:53 · 1637 阅读 · 1 评论 -
poj 3308 (最大流)
题意:n*m的地图,给出L个火星人登陆的坐标,要在火星人登陆地球的瞬间全部消灭他们,有一种激光枪,一次可以消灭一行(或一列),消灭一行(或一列)有不同的代价,总代价是所有激光枪的代价之积。思路:之前做过类似的题是求最少多少次能消灭,而最少的次数不一定是代价最小的,行跟列建立二分图,每个火星人就是一条边,就是选一些点覆盖所有的边,这些点的权值之积最小,如果是求和的话就是二分图的最小点权覆盖集了,原创 2013-09-24 23:05:38 · 1091 阅读 · 0 评论 -
poj 3155 (最大密度子图)
题意:一个公司有n个人,给出了一些有冲突的人的对数(u,v),公司决定裁人,那么总裁现在要裁掉冲突率最高的那些人(冲突率=在这些人中存在的冲突数/人数)。就是求出一些点,这些点之间的边数/点数最大。最大密度子图。思路:胡伯涛的论文《最小割模型在信息学竞赛中的应用》介绍了两种方法:第一种:转换为最大权闭合图的模型来求解:设max g = f(x)= |E‘|/|V’| ,找一个子图的原创 2013-09-27 17:19:34 · 2081 阅读 · 0 评论 -
poj 2135 (基础费用流)
题意:从1到n再到1,每条边只能走一次,求最短距离。建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0;求增广路用SPFA最短路求,,#include#include#includeconst int N=1100;const int inf=0x3fffffff;using nam原创 2013-08-14 15:40:40 · 635 阅读 · 0 评论 -
hdu 3228 (最大流+二分)
题意:一共有N个城市,一些城市里有金矿,一些城市里有仓库,金矿和仓库都有一个容量,有M条边,每条边是双向的,有一个权值,求将所有金矿里的储量都运送到仓库中,所需要经过的道路中,使最大的权值最小思路:增设一个超级源点和一个超级汇点,源点与每一个城市相连,容量为黄金数量,汇点与仓库相连,容量为仓库的容量,然后就是二分最小的最大相邻距离,跑最大流验证。#i原创 2013-08-13 18:50:43 · 967 阅读 · 0 评论 -
poj 3498 (最大流,枚举汇点)
题意:有n块浮冰,每块上有一定数量的企鹅,每块浮冰可以承受企鹅跳一定的次数后消失,给出企鹅跳的最大距离,求所有企鹅能跳到哪块浮冰上见面。建图:添加源点,汇点,源点与浮冰相连,容量为浮冰上企鹅的数量,浮冰之间可以相互连边,所以要拆点,拆完后点与拆点间连边,容量为浮冰能承受企鹅跳的次数,如果两块浮冰i,j间可以到达,加边i+n—>j,j+n—>i,容量无穷大。然后枚举所有浮冰与汇点相连求最大流。原创 2013-08-14 09:17:38 · 1202 阅读 · 0 评论 -
hdu 4322 (费用流,巧妙建图)
题意:如果一个小孩得到他喜欢的一种糖果他会得到k个欢乐值,如果得到不喜欢的糖果只能得到1个欢乐值,每个孩子只有当欢乐值达到一定数量时才会高兴。能不能使所有的孩子都高兴。分析:如果一种糖果没人喜欢的话,不管把它给谁效果都是一样的,所以只需要把有人喜欢的糖果分给孩子,得到一个最大的欢乐值,然后再用普通糖果去给那些没有达到限制的欢乐值。这里应该注意的是:这样求出的特殊糖果带来的最大欢乐值代表,所有孩原创 2013-08-19 17:21:00 · 676 阅读 · 0 评论 -
hdu 3998 (dp+最大流)
题意:求最长上升子序列的长度和数量。分析:用dp求出最长上升子序列m,dp数组存的就是该元素为子序列结尾的长度,源点与长度为1的点建边,长度为m的与汇点连边,然后枚举任意两个元素,ai,aj(ai>aj&&i>j&&dp[i]==dp[j]+1),j跟i连边,因为每个点只能选一次,所以边的容量都为1,求出最大流。#include#includeconst int原创 2013-08-19 18:28:59 · 806 阅读 · 0 评论 -
hdu 3572 (判断满流)
最大流问题:dinic做的,isap正在学习中建图还是比较容易的:源点与每个任务建边流量为任务需要的时间,任务与时间段的每个时间点建边流量为1,每个时间点与汇点建边流量为机器的个数#include#include#include#define N 3000#define inf 0x3fffffffusing namespace s原创 2013-08-10 18:09:46 · 768 阅读 · 0 评论 -
hdu 2732&&poj 2711 (最大流)
非常好的一道拆点题目,终于学会isap了,递归的,这几天要把非递归实现的敲出来,,题意:给出蜥蜴可以跳的最大距离,从一根柱子跳向可以到达的任意柱子,每个柱子有高度,蜥蜴没跳一次柱子会下降1米,问有多少蜥蜴跳不出所给的图。建图:源点与每个蜥蜴所在的柱子建边流量为1,应为柱子间可以互相达到的,所以每个柱子应该拆成两个点,每根柱子相当于一条边,流量为柱子的高度,没两个可以互相到达的柱子间建边(一原创 2013-08-10 18:29:45 · 937 阅读 · 0 评论 -
hdu 3605 (最大流)
判断是否满流,,,人数给了100000,一看普通建图肯定不行,卡了几天了,,看了网上说把状态相同(选择星球相同)的人合并,用二进制,最多有2^10种状态,#include#include#include#define N 100100#define inf 0x3fffffffusing namespace std;int dis[N],原创 2013-08-10 18:53:49 · 980 阅读 · 0 评论 -
poj 3281 (最大流,构图)
题意:每头牛有想吃的食物和饮料,每头牛最多只能吃一种食物和一种饮料,给出牛的个数,食物和饮料的种类数,每头牛想要的食物和饮料的种类。刚开始想着把牛放中间,从汇点到食物,食物到牛,牛到饮料,饮料到汇点建图,当时没想清楚就敲了,结果wrong了,后来一想这样建图的话,经过没头牛的流量就不是1了,果断拆点,把每头牛拆成两个点,流量为1#includ原创 2013-08-10 19:31:34 · 717 阅读 · 0 评论 -
poj 2112 (最大流+二分)
题意:有k台挤奶机,c头奶牛,给出这k+c个实体间的距离,求出每头奶牛都到一台挤奶机去,怎么分配使奶牛走的最大距离最小。用二分枚举最大距离,,,,#include#include#define N 500#define inf 0x3fffffffint map[N][N],dis[N],gap[N],head[N],num,n,m,D,start,原创 2013-08-12 08:35:02 · 672 阅读 · 0 评论 -
poj 2289 (最大流+二分)
题意:把n个好友分到m个组。求每个组的最大人数最小可以是多少人,,,最大流+二分,,,,isap跑得还是挺快的,,,#include#includeconst int N=1510;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,ans,end,first[N]原创 2013-08-12 10:33:23 · 949 阅读 · 0 评论 -
poj 1087 (最大流)
题意:在一个会议室里有n种插座,每种插座一个,每个插座只能插一种以及一个电器(或者适配器),有m个电器,每个电器有一个插头需要插在相应一种插座上,不是所有电器都能在会议室找到相应插座,有k种适配器,每种适配器可以有无限多数量,每种适配器(a, b)可以把b类插座变为a类插座,问最后有多少个电器无法使用。建图:源点,电器,插座,汇点,,源点跟电器建边,流量为1,电器与对应的插座连边,流量为1,转原创 2013-08-12 17:11:41 · 606 阅读 · 0 评论 -
poj 2391 (Floyd+最大流+二分)
题意:有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点。两个避雨点间可以相互到达,所以必须要拆点,如果i-->j可以到达,加边i->j+n,流量无穷大,当然i->i+n也必须有边,,,Folyd要用long long,,,,,原创 2013-08-12 15:19:23 · 620 阅读 · 0 评论 -
poj 2455(二分+最大流)
题意:从1到n,要走不少于K条路,每条路不能重复走,点可以重复走,求所走的路中最长的最小,,找出距离的最大值,然后二分,建图时符合的每条边链接的两点间建双向边,流量都为1,求最大流#include#includeconst int N=210;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num原创 2013-08-12 16:12:06 · 707 阅读 · 0 评论 -
poj 1459 (最大流)
最大流简单题,,这题重要的是知道了scanf("%s",str);sscanf(str,"(%d,%d)%d",&x,&y,&w);读入方式#include#includeconst int N=210;const int inf=0x3fffffff;int dis[N],gap[N],head[N],num,start,end,ans,n,m原创 2013-08-12 17:21:04 · 708 阅读 · 0 评论