zoukankan      html  css  js  c++  java
  • 网络流--最大流--HDU 3549 Flow Problem

    题目链接

    Problem Description

    Network flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.

     Input

    The first line of input contains an integer T, denoting the number of test cases.
    For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)
    Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)

     Output

    For each test cases, you should output the maximum flow from source 1 to sink N.

    Sample Input

    2
    3 2
    1 2 1
    2 3 1
    3 3
    1 2 1
    2 3 1
    1 3 1

    Sample Output

    Case 1: 1 
    Case 2: 2

    模板题,用来测试模板,我的模板都能过。

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #define INF 1e9
    using namespace std;
    const int maxn=200+5;
    
    struct Edge
    {
        int from,to,cap,flow;
        Edge() {}
        Edge(int f,int t,int c,int flow):from(f),to(t),cap(c),flow(flow) {}
    };
    
    struct Dinic
    {
        int n,m,s,t;
        vector<Edge> edges;
        vector<int> G[maxn];
        bool vis[maxn];
        int cur[maxn];
        int d[maxn];
    
        void init(int n,int s,int t)
        {
            this->n=n, this->s=s, this->t=t;
            edges.clear();
            for(int i=1; i<=n; i++)
                G[i].clear();
        }
    
        void AddEdge(int from,int to,int cap)
        {
            edges.push_back(Edge(from,to,cap,0));
            edges.push_back(Edge(to,from,0,0));
            m = edges.size();
            G[from].push_back(m-2);
            G[to].push_back(m-1);
        }
    
        bool BFS()
        {
            memset(vis,0,sizeof(vis));
            queue<int> Q;
            d[s]=0;
            Q.push(s);
            vis[s]=true;
            while(!Q.empty())
            {
                int x=Q.front();
                Q.pop();
                for(int i=0; i<G[x].size(); i++)
                {
                    Edge& e=edges[G[x][i]];
                    if(!vis[e.to] && e.cap>e.flow)
                    {
                        vis[e.to]=true;
                        Q.push(e.to);
                        d[e.to]= 1+d[x];
                    }
                }
            }
            return vis[t];
        }
    
        int DFS(int x,int a)
        {
            if(x==t || a==0)
                return a;
            int flow=0,f;
            for(int& i=cur[x]; i<G[x].size(); i++)
            {
                Edge& e=edges[G[x][i]];
                if(d[x]+1==d[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow) ))>0 )
                {
                    e.flow+=f;
                    edges[G[x][i]^1].flow -=f;
                    flow+=f;
                    a-=f;
                    if(a==0)
                        break;
                }
            }
            return flow;
        }
    
        int Maxflow()
        {
            int flow=0;
            while(BFS())
            {
                memset(cur,0,sizeof(cur));
                flow += DFS(s,INF);
            }
            return flow;
        }
    } DC;
    
    int main()
    {
        int n,m,t;
        scanf("%d",&t);
        for(int i=1;i<=t;++i)
        {
            scanf("%d%d",&n,&m);
            DC.init(n,1,n);
            while(m--)
            {
                int u,v,w;
                scanf("%d%d%d",&u,&v,&w);
                DC.AddEdge(u,v,w);
            }
            printf("Case %d: %d
    ",i,DC.Maxflow());
        }
        return 0;
    }
    
  • 相关阅读:
    eclipse快捷键
    iOS音频播放 (二):AudioSession 转
    HNU13377:Book Club(DFS)
    BAPC2014 K&amp;&amp;HUNNU11591:Key to Knowledge(中途相遇法)
    小米净水器与小区过滤价格水对照.xls
    NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(一)
    hibernate动态表名映射--仅仅有想不到,没有做不到
    【BZOJ 1660】 [Usaco2006 Nov]Bad Hair Day 乱发节
    oracle-企业信息化
    线性查找算法
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798633.html
Copyright © 2011-2022 走看看