hdu1532(网络流)

传送门:Drainage Ditches

题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量。

分析:网络流入门题,第一次写按照白书上毫无优化的Ford_fulkerson算法,先练练手感,再去学习sap和dinic算法吧。

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 300
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
inline int read()
{
    char ch=getchar();
    int x=0;
    while(ch>‘9‘||ch<‘0‘)ch=getchar();
    while(ch<=‘9‘&&ch>=‘0‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x;
}
int cap[N][N];
int flow[N][N];
int a[N],p[N];
int Ford_fulkerson(int s,int t)
{
    queue<int>que;
    FILL(flow,0);
    int f=0,u,v;
    while(1)
    {
        FILL(a,0);
        a[s]=inf;
        que.push(s);
        while(!que.empty())
        {
            u=que.front();que.pop();
            for(v=1;v<=t;v++)
            {
                if(!a[v]&&flow[u][v]<cap[u][v])
                {
                    p[v]=u;que.push(v);
                    a[v]=a[u]<cap[u][v]-flow[u][v]?a[u]:cap[u][v]-flow[u][v];
                }
            }
        }
        if(a[t]==0)return f;
        for(int i=t;i!=s;i=p[i])
        {
            flow[i][p[i]]-=a[t];
            flow[p[i]][i]+=a[t];
        }
        f+=a[t];
    }
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)>0)
    {
        FILL(cap,0);
        for(int i=1;i<=n;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            cap[u][v]+=w;
        }
        printf("%d\n",Ford_fulkerson(1,m));
    }
}

时间: 2024-10-10 05:18:04

hdu1532(网络流)的相关文章

HDU1532 网络流:最大流之福德福克森算法

问题描述:约翰是个农民,每次下雨的时候他的庄家总是会被淹没,这就意味着当庄家被水淹后需要很长时间才能重新生长出来,因此,约翰已经建立了一系列排水管道为了使他的庄家尽可能被淹没的最少,也就是说管道的排水量必须很大.作为一名工程师,约翰可以计算出管道网能排水的最大能力. Input:输入包含多组用例,每组用例第一行是两个数N,M,N表示一共有N个管道,M表示一共有M个点,接下来N行每行输入三个数字a,b,c表示,a管道口到b管道口最大排水能力为c. Output:对每一组用例,输出排水量的最大值 S

【不可能的任务8/200】hdu1532网络流

(双倍经验题) 第二次写dinic模板,居然一遍写对了,而且短了不少O(∩_∩)O~ 1 #include <cstdio> 2 #define INF 2147483647 3 int n,m,ans,x,y,z,M,h,t;long long zl; 4 int d[201],l[300],fir[201],nex[500],to[500],wei[500]; 5 inline int min(int a,int b){if(a<b) return a;else return b;}

HDU1532 Drainage Ditches (网络流)

Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14451    Accepted Submission(s): 6840 Problem Description Every time it rains on Farmer John's fields, a pond forms over Bessie'

hdu1532——Drainage Ditches(网络流模板)

Problem Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of d

网络流之最大流问题

Reference: http://blog.csdn.net/rrerre/article/details/6751520 http://blog.csdn.net/y990041769/article/details/21026445 最大流Edmonds_Karp算法模板: 算法思想:step 1. 令所有弧的流量为0,从而构造一个流量为0的可行流f(称作零流).step 2. 若f中找不到可改进路则转step 5:否则找到任意一条可改进路P.step 3. 根据P求delta.step

网络流初步: 最大流

好吧.. 直接上模板... 思想可以看看这里点击打开链接 </pre><pre name="code" class="cpp"> queue<int> q; memset(flow,0,sizeof(flow)); int f = 0; while(true){ memset(a,0,sizeof(a)); a[s] = INF; q.push(s); while(!q.empty)){ //BFS找增广路 int u = q.f

最大流hdu1532

看了几天的网络流 没怎么看懂 看看停停 先把最大流搞了一下 最大流就是从出发点到终点的最大流量. 先要搞清楚残量网络,也就是做完这些后还能走多少. 还有就是增广路(个人理解:走完这条路后,剩余的还能怎么走,走多少,并相加): hdu1532这题比较简单 也差不多是EK算法的模版 1 /*hdu1532*/ 2 #include<stdio.h> 3 #include<string.h> 4 #include<queue> 5 #define maxint 9999999

hiho 第118周 网络流四&#183;最小路径覆盖

描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机会派出若干个调查团去沿途查看一下H市内各个景点的游客情况. H市一共有N个旅游景点(编号1..N),由M条单向游览路线连接.在一个景点游览完后,可以顺着游览线路前往下一个景点. 为了避免游客重复游览同一个景点,游览线路保证是没有环路的. 每一个调查团可以从任意一个景点出发,沿着计划好的游览线路依次调查,到达终点后再返回.每个景点只会有一个调查团经过,不会重复调查. 举个例子: 上图中一共派出了3个调查团: 1

POJ2584 T-Shirt Gumbo 二分图匹配(网络流)

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 const int inf=0x3f3f3f3f; 6 const int sink=30; 7 8 struct Edge 9 { 10 int to; 11 int next; 12 int capacity; 13 14 void assign(int t,int n,int c) 15 { 16 to=t; next=n; ca