zoukankan      html  css  js  c++  java
  • poj 1273 Drainage Ditches 最大流

    解题思路: 源点为1,汇点为N, 直接求最大流就好

    View Code
    #include<stdio.h>
    #include<string.h>
    #include<string.h>
    #define MIN(a,b) (a)<(b)?(a):(b)
    const int inf = ~0u>>1;
    const int MAXN = 210;
    int n, m, S, T, N;
    int    head[MAXN], idx, h[MAXN], vh[MAXN];
    struct Edge{
        int v, f, nxt;    
    }edge[MAXN<<4];
    
    void AddEdge(int u,int v,int f)
    {
        edge[idx].v = v; edge[idx].f = f;
        edge[idx].nxt = head[u]; head[u] = idx++;
        edge[idx].v = u; edge[idx].f = 0;
        edge[idx].nxt = head[v]; head[v] = idx++;
    }
    void build()
    {
        int u, v, f;
        S = 1; T = n; N = n;    
        memset( head, 0xff, sizeof(head));
        idx = 0;
        for(int i = 0; i < m; i++)
        {
            scanf("%d%d%d", &u,&v,&f);
            AddEdge( u, v, f );
        }
    }
    int DFS( int u, int flow )
    {
        if( u == T ) return flow;
        int tmp = h[u]+1, remain = flow;
        for(int i = head[u]; ~i; i = edge[i].nxt)
        {
            int v = edge[i].v;
            if( edge[i].f && h[u] == h[v]+1 )
            {
                int p = DFS( v, MIN(remain,edge[i].f) );
                edge[i].f -= p; edge[i^1].f += p; remain -= p;
                if( remain == 0 || h[S] == N ) return flow-remain;
            }
        }
        for(int i = head[u]; ~i; i = edge[i].nxt )
            if( edge[i].f )    tmp = MIN( tmp, h[ edge[i].v ] );
        if( !( --vh[ h[u] ] )  )    h[S] = N;
        else    ++vh[ h[u] = tmp+1 ];
        return flow - remain;
    }
    void sap()
    {
        int maxflow = 0;
        memset( vh, 0, sizeof(vh));
        memset( h, 0, sizeof(h));
        vh[0] = N;
        while( h[S] < N ) maxflow += DFS( S, inf );
        printf("%d\n", maxflow );
    }
    int main()
    {
        while( scanf("%d%d", &m,&n) != EOF)
        {
            build();
            sap();
        }
        return 0; 
    }
  • 相关阅读:
    matlab矩阵和矩阵操作基础
    [ZZ] MathType转化为LaTeX公式语言
    [综] 粒子滤波
    [综] Endnote怎么下载杂志格式?
    英语句子的连接方式
    [zz] postscript打印机以及ps文件转eps文件
    [zz]SCI投稿经验
    all, whole, entire, total, complete
    [转] 动态规划 最短路径
    [zz] Dynamic Time Warping 动态时间规整(弯折)
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2811864.html
Copyright © 2011-2022 走看看