• HDU 3549 基础网络流EK算法 Flow Problem


    Flow Problem

    Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 10184    Accepted Submission(s): 4798


     

    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

    Author

    HyperHexagon

    Source

    HyperHexagon's Summer Gift (Original tasks)

    Recommend

    zhengfeng   |   We have carefully selected several similar problems for you:   1532  3572  3416  3081  3491 

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    int dp[100][100],pre[100];
    const int tmin=999999999;
    int maxflow;
    void EK(int start,int end,int n){
        while(1){
            queueq;
            q.push(1);
           int  minflow=tmin;
            memset(pre,0,sizeof(pre));
            while(!q.empty()){
                int u=q.front();
                q.pop();
                for(int i=1;i<=n;i++){
                    if(dp[u][i]>0&&!pre[i]){
                        pre[i]=u;
                        q.push(i);
                    }
                }
            }
            if(pre[end]==0)
                break;
            for(int i=end;i!=start;i=pre[i]){
                minflow=min(dp[pre[i]][i],minflow);
            }
            for(int i=end;i!=start;i=pre[i]){
                dp[pre[i]][i]-=minflow;
                dp[i][pre[i]]+=minflow;
            }
            maxflow+=minflow;
        }
    }
    int main(){
       int count=0;
       int n,m;
       int t;
       scanf("%d",&t);
       while(t--){
            scanf("%d%d",&n,&m);
           memset(dp,0,sizeof(dp));
           memset(pre,0,sizeof(pre));
           count++;
           int u,v,w;
           for(int i=1;i<=m;i++){
               scanf("%d%d%d",&u,&v,&w);
               dp[u][v]+=w;
           }
           maxflow=0;
           EK(1,n,n);
           printf("Case %d: %d\n",count,maxflow);
       }
       return 0;
    }

  • 相关阅读:
    nodejs创建web服务器
    halcon算子1、dev_open_window
    python作图
    SQLServer过滤数据(二)
    TabLayout使用以及自定义tab标签
    三次握手和四次挥手
    Spring Boot : ORM 框架 JPA 与连接池 Hikari
    「高性能响应式 Web 开发实战」 Part I
    可视化工具Datart踩(避)坑指南(5)——先清空回收再删除
    【无标题】
  • 原文地址:https://blog.csdn.net/apple_51426592/article/details/127856412