图论—网络流
文章平均质量分 69
My_ACM_Dream
生活没有彩排每天都是现场直播
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ZOJ 2587(判断最小割的唯一性)
dfs 从源点到汇点如果能访问到所有点说明唯一如果不能则不唯一原创 2014-11-13 10:32:34 · 878 阅读 · 0 评论 -
hdu3395(拆点+最大费用流)
一直wa /* * this code is made by LinMeiChen * Problem: hdu 3395 * Type of Problem: 网络流 * Thinking: * Feeling: */ #include #include #include #include #include #include #include #include #include #includ原创 2014-11-13 10:29:33 · 566 阅读 · 0 评论 -
Best#1_3 hdu4859(最小割)
因为E有两个选择D或者. 其实就暗含了最小割的模型。 最小割的话,就是一部分分到源点一侧,一部分分到汇点一侧。 如果把源点分在一起当成是. 和汇点分在一起当成是D. 那么建图的时候,相邻的建流量为1的边。 如果这个点本来是. 那个连汇点是INF,本来是D的,连源点是INF。 如果是这种建图的话,最小割求出来的最小周长。 我们需要的最大周长。原创 2014-11-15 11:21:28 · 660 阅读 · 0 评论 -
ISAP算法
struct EDGE{ int v,next,c,f; }E[maxn<<1]; int head[maxn],tol; int gap[maxn],dep[maxn],pre[maxn],cur[maxn]; void Init(){ memset(head,-1,sizeof head); tol=0; } void add_edge(int u,int v,in原创 2015-03-25 22:55:01 · 650 阅读 · 0 评论 -
poj 3436 ACM Computer Factory (最大流)
题目真心没读懂,参考这位仁兄 通过拆点建图,然后跑一边最大流,枚举每条边找出有流量减少的边,那么这条边肯定是最大流上的边输出即可。 #include #include #include #include #include #include #include #include #include #include #define B(x) (1<<(x)) using namespace std;原创 2015-03-26 00:55:08 · 495 阅读 · 0 评论 -
poj 3281 Dining (最大流)
题意: 给出N个牛,D个食物,和F杯饮料。然后给出每头牛喜欢吃的食物和饮料的编号,但是没个食物和每一杯饮料只能供一头牛享用,问最多有多少头牛可以同时吃到食物和喝到饮料。 题解: 开始我的想法超级源点连饮料和食物,然后对应的饮料食物连上能吃它的牛,然后牛连超级汇点。结果wa。真确做法是源点连食物,食物连牛,牛连饮料,饮料连汇点,牛拆点成两个点。 #include #include #incl原创 2015-03-26 21:22:04 · 566 阅读 · 0 评论 -
poj 2195 Going Home (费用流)
水题,直接搞。 #include #include #include #include #include #include #include #include #include #include #define B(x) (1<<(x)) using namespace std; void cmax(int& a,int b){ if(b>a)a=b; } void cmin(int& a,in原创 2015-03-27 01:51:58 · 436 阅读 · 0 评论 -
poj 2516 Minimum Cost (最小费用流)
这题不错,分开最小费用流,每种物品来一次。 /* * this code is made by LinMeiChen * Problem: * Type of Problem: * Thinking: * Feeling: */ #include #include #include #include #include #include #include #include #include #原创 2014-11-13 10:23:46 · 649 阅读 · 0 评论 -
hdu 4289 Control (最小割)
题意: 给出一个图,盗贼在s点,警察在t点,给出在每个点设置捕获点需要的花费,现在问在让盗贼无法通过需要的最少花费。 题解: 最小割定理,拆点后,把点权变为边权,然后跑一边最大流,结果就是最小割的值。 #include #include #include #include #include #include #include #include #include #include #defi原创 2015-03-29 16:18:13 · 431 阅读 · 0 评论 -
hdu 2732 Leapin' Lizards (拆点,最大流)
题意: 给出一个地图,地图里面有一些青蛙,每个位置有限定承受的次数,如果青蛙跳跃到某个位置,那么这个位置的承受力就减一,如果承受力是0就无法到达这个位置。现在问最少有多少青蛙无法跳出地图。 题解: 将有承受力的点拆点,然后网络流。TL中。。 #include #include #include #include #include #include #include #include原创 2015-03-30 19:58:03 · 510 阅读 · 0 评论 -
上下界 最小流
做法: 1、和最大流有点相反,先ss tt连边(和最大流一样)但是这个和最大流不同的是先不用建立 t-s 的边 2、Dinic(ss,tt) 3、现在建立 t-s (t, s, 0, oo) 4、maxflow=Dinic(s,t) if(sum==maxflow)成立有解不成立无解 sum和最大流一样表示ss流出的所有边流量和 5、输出边的流量 #include #include原创 2014-11-13 10:20:06 · 681 阅读 · 0 评论 -
可行流
对于无源汇问题,方法有两种. 1 从边的角度来处理. 新建超级源汇, 对于每一条有下界的边,x->y, 建立有向边 超级源->y ,容量为x->y下界,建立有向边 x-> 超级汇,容量为x->y下界.建立有向边 x->y,容量为x->y的上界减下界. 2 从点的角度来处理. 新建超级源汇,对于每个点流进的下界和为 in, 流出此点的下界和为out.如果in > out. 建立有原创 2014-11-13 10:16:39 · 2779 阅读 · 0 评论 -
Poj2175(费用流,负环消圈)
挺好的题 充分利用了spfa 判断最费用流是否最优的充分必要条件是——图中是否存在负环 如果存在说明最费用流最优否则相反原创 2014-11-13 10:25:00 · 1787 阅读 · 1 评论 -
poj1087(题意难懂)
这道题容易读懂,但是建图比较不容想到,源点到用电器建边,用电器到插头建边,插头到汇点建边,且权值都为1,置配器的两个插头节点建立权值为INF的边 抽象出现,其实最终的最大流量就是能够接通的电器数,只要用电器数-maxf就ok了。 这里被map函数搞死了,以后记得组后用string不要用char map原创 2014-11-13 10:02:04 · 891 阅读 · 0 评论 -
上下界 最大流
做法: 1、有源汇编成无源汇 (t-s, 0, INFMAX) 2、ss tt 连接个点 intout>0(ss-i,0,inout[i]) inout 3、然后跑一片最大流 max=Dinic(ss,tt) 之后的这步很重要 head[ss]=head[tt]=-1//删除ss 和 tt 4、if( max == sum ) 成立有解 不成立无解 sum=所有ss流出的流量总原创 2014-11-13 10:18:12 · 698 阅读 · 0 评论 -
hdu3416(最短路+最大流)
最短路+最大流 用Spfa算出 s到各个点的最短路 t到各个点的最短路 if( dis1[i] + dis2[i] + map[i][j] ==dis1[t] ) 满足这种情况说明边在最短路上,所以根据这个方法建边 然后最大流解决原创 2014-11-13 10:08:28 · 1302 阅读 · 0 评论 -
最小(大)费用流
算法很简单 Spfa+增广路 1、首先按照边的费用Spfa最短路(如果是求最大费用可用最长路) 2、接着增光路的可行流的调节 3、重复1 2 直到最短路无法到达汇点为止 挺简单的注意细节即可原创 2014-11-13 10:21:26 · 788 阅读 · 0 评论 -
最小割
最小割定理:最大流的流量等于最小割对应的边集容量的最小值 Poj 1815 拆点+枚举暴力 好题 赞原创 2014-11-13 10:30:56 · 726 阅读 · 0 评论 -
强大的Dinic
Dinic算相对来讲比较稳定,写成邻接表示最好的选择 这里以hdu 4280 为例子 加入一个开栈的外挂神器 递归版: struct EDGE { int v, w; int next; }E[maxn*2]; int head[maxn], level[maxn]; int k; void addE(int u, int v,int w) { E[k].v = v原创 2014-11-13 09:58:18 · 679 阅读 · 0 评论 -
poj 2112 Optimal Milking (输出超限)
题意: K太机器,C头牛,之间有距离,每个机器能供m头牛,没头牛需要一台机器。问在所有牛都有机器供应,并且牛离机器距离的最大距离最小是多少。 题解: 二分枚举最大距离,然后网络流建边,满足不大于枚举的最大距离才能建边. #include #include #include #include #include #include #include #include #include #defi原创 2015-04-09 19:40:09 · 955 阅读 · 0 评论
分享