zoukankan      html  css  js  c++  java
  • Milk Pumping

    2020-07-06 个人赛1 F:Milk Pumping


     题面:

    题解:其实方法很多,千万别浪到网络流用dinic求最大网络流求的最小费用,这题不一样。最大流/最小费用 不一定大于 流量/费用的最大值!

    其实本题用邻接表存储,加上队列和结构体完全可以做本题,难度不高于bfs的裸题。

    代码:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <map>
    #include <queue>
    #include <vector>
    using namespace std;
    typedef long long ll;
    #define inf 0x3f3f3f3f
    struct node {
        int price;
        int flow;
        double rate;
        node() {}
        node(int cc, int ff) { price = cc; flow = ff; }
    }p[1005];
    struct gd {
        int e;//终点
        int price;
        int flow;
        gd() {}
        gd(int ee, int pp, int ff) { e = ee; price = pp; flow = ff; }
    };
    vector<gd>Map[1005];
    int main(void)
    {
        int n, m;
        cin >> n >> m;
        for (int i = 1; i <= m; i++)
        {
            int a, b, c, d;
            cin >> a >> b >> c >> d;
            Map[a].push_back(gd(b, c, d));
            Map[b].push_back(gd(a, c, d));
        }
        p[1].price = 0; p[1].flow = inf; p[1].rate = 0;
        for (int i = 2; i <= n; i++)
        {
            p[i].price = inf;
            p[i].flow = 0;
            p[i].rate = 0;
        }
        queue<int>q;
        q.push(1);
        int df, dc; 
        double dr;
        while (!q.empty())
        {
            int now = q.front();
            q.pop();
            for (int i = 0; i < Map[now].size(); i++)
            {
                df = min(Map[now][i].flow, p[now].flow);//此时的管道流量=min(新管道流量,当前点位的流量最小值)
                dc = p[now].price + Map[now][i].price;//新价格=当前点位不安放这根管道的总价+这根管道的价格
                dr = 1.0 * df / dc;
                if (dr > p[Map[now][i].e].rate)//如果通过这根管道到达下一个点位,能比之前已经存储的下一个点位的最高占比更加高的话,选取这根管道,并且更新数据
                {
                    p[Map[now][i].e].flow = df;
                    p[Map[now][i].e].price = dc;
                    p[Map[now][i].e].rate = dr;
                    q.push(Map[now][i].e);
                }
            }
        }
        cout << (floor)(1000000LL * p[n].rate) << '
    ';
        return 0;
    }

     总结:只要选取合理的存储方式,这类题目基本代码难度不高。

  • 相关阅读:
    js组件之间的通信
    localStorage, localforage, web sql三者的比较
    最近的学习计划
    无状态的web应用
    转 :meta name的含义:<META http-equiv=Content-Type content="text/html; charset=gb2312">
    css清除浮动的方法汇总
    segfault at 7fff6d99febc ip 0000003688644323 sp 00007fff6d99fd30 error 7 in libc.so.6[3688600000+175000]
    Linux内核定时器
    TCPIP网络协议层对应的RFC文档
    UIDocumentPickerViewController使用
  • 原文地址:https://www.cnblogs.com/ZJNU-huyh/p/13257515.html
Copyright © 2011-2022 走看看