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; 
    }
  • 相关阅读:
    windows下python开发环境搭建
    看看两年前的我
    网络函数[00]函数总述
    网络函数[04]connect解析
    网络函数[08]网络读取函数解析
    网络函数[01]套接口地址图解
    网络函数[13]
    网络函数[07]accept解析
    网络函数[10]shutdown解析
    网络函数[14]
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2811864.html
Copyright © 2011-2022 走看看