最大流
煦--晨
菜鸟起飞
展开
-
poj(1273)(最大流)
#include"string.h"#include"stdio.h"#include"queue"#define inf 9999999using namespace std;int r[300][300];//残留网络,初始化为原图int pre[300];//记录流的上一个结点,即从pre[i]流向iint visit[300];记录是否访问int n,m;原创 2013-08-06 13:36:40 · 670 阅读 · 0 评论 -
hdu(1569)方格取数(2)(dinic算法)
ek算法效率太低,在这会超时,用dinic算法,还不错。。#include"stdio.h"#include"string.h"#define inf 0x7fffffff#define M 20000int n,m,s,t,adj[M],dis[M];int q[M],p[M],sum;struct point { int v,u; int flow,原创 2013-08-16 10:25:55 · 538 阅读 · 0 评论 -
((dinic)算法。。
一、引言图论这门古老而又年轻的学科[1]在信息学竞赛中占据了相当大的比重。其中,网络流算法经常在题目中出现。网络流涵盖的知识非常丰富,从基本的最小割最大流定理到网络的许多变形再到最高标号预流推进的六个优化等等,同学们在平时需要多多涉猎这方面的知识,不断积累,才能应对题目的各种变化。随着信息学竞赛的不断发展,其题目的难度以及考察范围都不断增大。现在,对于一些新出现的题目,仅仅掌握最朴素的网络原创 2013-08-16 10:29:06 · 869 阅读 · 0 评论 -
poj(3228)Gold Transportation
用最大流和并查集应该都可以,但不知为何,最大流老是超时,囧。。。题意: 给出一幅无向图,有些节点有财富,有些节点有仓库。要求把所有财宝运至仓库,使经过的最大边最小。解法: 并查集加Kruskal。将每个节点的财富处理成负值,仓库大小为正值,加起来,然后现在的目的是构成一幅森林,使所有节点的值为非负,并使经过的最大边最小。显然的类似Kruskal的贪心,将边从小到大排序,如果较小边和比它原创 2013-08-10 19:22:19 · 684 阅读 · 0 评论 -
最小费用最大流
最小费用最大流最小费用最大流一般用邻接表来实现,因为邻接矩阵不能处理平行边等等;而一条有向边是要储存两条信息,无向图的话要拆成两条有向边处理,相当于变为4条边,这也是邻接矩阵不能做到的然后最小费用最大流的原理就不讲了,讲一下实现的要注意的问题和一些技巧1.用结构体数组来保存边,最好从下标0开始保存不要从下标1开始保存,因为增广的时候需要用到位运算,从下标1保存不利于位运原创 2013-08-07 16:56:52 · 505 阅读 · 0 评论 -
poj(3281)Dining
难点在于建图;要将牛拆分成 两个点,一个与drink相连,一个与food相连,这两个点也连,他们的权值为一。。#include"stdio.h"#include"string.h"#include"queue"#define inf 9999999int r[900][900];int pre[900];int visit[900];int N,F,D,k;原创 2013-08-07 13:19:12 · 533 阅读 · 0 评论 -
hdu(1532)Drainage Ditches
完全一样的方法;#include"string.h"#include"stdio.h"#include"queue"#define inf 9999999using namespace std;int r[300][300];int pre[300];int visit[300];int n,m;int bfs(int s,int t){ int p原创 2013-08-06 15:50:18 · 512 阅读 · 0 评论 -
hdu(3549)Flow Problem
#include"stdio.h"#include"string.h"#include"queue"int r[100][100];int pre[1000];int visit[1000];#define inf 999999999using namespace std;int n,m;int bfs(int s,int t)//查找增广路。{ int原创 2013-08-06 15:39:02 · 536 阅读 · 0 评论 -
poj(1459)Power Network
解题思路:多源多汇最大流问题目给出很多都是废话,特别是符号s(u),d(u),Con还有那条公式都别管,混淆视听难点在于构图电站p(u)均为源点,用户c(u)均为汇点,中转站当普通点处理第一个误区是例图, 结点 和 边 都有x/y(流量和容量),这个很容易使人产生矛盾(因为学习最大流问题是,只有 边 才有流量和容量。 但是不难发现,题目所给的例图中有多个源点,多个汇原创 2013-08-06 22:41:23 · 537 阅读 · 0 评论 -
poj(1149)PIGS
//此题的难点在于,如何建图。让r获得一定的值。。//每个顾客分别用一个节点来表示。 //对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量。如果从源点到一名顾客有多条边,则可以把它们合并成一条,容量相加。 //对于每个猪圈,假设有 n 个顾客打开过它,则对所有整数 i ∈ [1, n),从该猪圈的第 i 个顾客向第 i + 1 个顾客连一条边,容量为 +∞。原创 2013-08-06 19:25:12 · 508 阅读 · 0 评论 -
最大流入门
最大流模板【EdmondsKarp算法,简称EK算法,O(m^2n)】 因为是初学教程,所以我会尽量避免繁杂的数学公式和证明。也尽量给出了较为完整的代码。本文的目标群体是网络流的初学者,尤其是看了各种NB的教程也没看懂怎么求最大流的小盆友们。本文的目的是,解释基本的网络流模型,最基础的最大流求法,即bfs找增广路法,也就是EK法,全名是Edmond-Karp,其实我倒是觉得记一下算法的全原创 2013-08-06 13:46:55 · 705 阅读 · 0 评论 -
hdu(1565)方格取数(1)
利用最大流求权值。。对于此棋盘应进行黑白染色,相邻元素其权值为无穷大,源点到白棋的权值为白棋的值,黑棋到汇点的权值为黑棋的值。然后建立通路求出最大流。。。#include"stdio.h"#include"string.h"#include"queue"#define inf 0x7fffffffusing namespace std;int r[300][30原创 2013-08-13 16:48:22 · 646 阅读 · 0 评论