zoukankan      html  css  js  c++  java
  • F

    题目大意:题目说了一大堆,其实都是废话......让人有些不知所云,其实就是给了一些电厂,和一些消费点,然后里面有一些路线什么的,求出消费点可以最多消费的电量是多少。
    输入大意:

    分析:懂了题意就是一个模板。。。还不用拆点什么的,不过输入的时候不太明白为什么scanf("(%d,%d)%d")这种输入不好使了,只得用字符串直接读的。

    下面是AC代码。


    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<stack>
    #include<algorithm>
    #include<math.h>
    using namespace std;

    const int MAXN = 205;
    const int oo = 1e9+7;

    int G[MAXN][MAXN], layer[MAXN];

    void In(char s[])
    {
        scanf("%s", s);

        for(int i=0; s[i]; i++)
        {
            if(s[i]==',' || s[i]=='(' || s[i]==')')
                s[i] = ' ';
        }
    }

    bool bfs(int start, int End)
    {
        int used[MAXN] = {0};
        queue<int> Q;Q.push(start);

        memset(layer, 0sizeof(layer));
        used[start] = layer[start] = 1;

        while(Q.size())
        {
            int u = Q.front();Q.pop();

            if(u == End)return true;

            for(int i=0; i<=End; i++)
            {
                if(!used[i] && G[u][i])
                {
                    used[i] = true;
                    layer[i] = layer[u] + 1;
                    Q.push(i);
                }
            }
        }

        return false;
    }
    int dfs(int u, int MaxFlow, int End)
    {
        if(u == End)return MaxFlow;

        int uFlow = 0;

        for(int i=0; i<=End; i++)
        {
            if(G[u][i] && layer[u] == layer[i]-1)
            {
                int flow = min(MaxFlow-uFlow, G[u][i]);
                flow = dfs(i, flow, End);
                G[u][i] -= flow;
                G[i][u] += flow;
                uFlow += flow;

                if(uFlow == MaxFlow)
                    break;
            }
        }

        return uFlow;
    }
    int dinic(int start, int End)
    {
        int MaxFlow = 0;

        while(bfs(start, End) == true)
            MaxFlow += dfs(start, oo, End);

        return MaxFlow;
    }

    int main()
    {
        int N, NP, NC, M;

        while(scanf("%d%d%d%d", &N, &NP, &NC, &M) != EOF)
        {
            int i, u, v, flow, start=N, End=start+1;
            char s[100];

            memset(G, 0sizeof(G));

            while(M--)
            {///线路
                In(s);
                sscanf(s, "%d%d%d", &u, &v, &flow);

                G[u][v] += flow;
            }

            for(i=1; i<=NP; i++)
            {///输入发电站,与源点相连
                In(s);
                sscanf(s, "%d%d", &u, &flow);
                G[start][u] = flow;
            }
            for(i=1; i<=NC; i++)
            {///消费点,与汇点相连
                In(s);
                sscanf(s, "%d%d", &u, &flow);
                G[u][End] = flow;
            }

            printf("%d ", dinic(start, End));
        }

        return 0; 

    }

  • 相关阅读:
    [问题2014A13] 解答
    [问题2014A12] 解答
    [问题2014A13] 复旦高等代数 I(14级)每周一题(第十五教学周)
    [问题2014A10] 解答
    php使用amqplib方式使用rabbitmq
    Ubuntu 16.04 源码编译安装PHP7+swoole
    Ubuntu apt-get更换阿里云源
    微信企业号网页授权
    nginx转发swoole以及nginx负载
    PHP 命名空间
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4716432.html
Copyright © 2011-2022 走看看