zoukankan      html  css  js  c++  java
  • [ICPC2019西安E] Flow

    [ICPC2019西安E] Flow - 贪心

    Description

    给出一个有向简单图,顶点 (1) 到顶点 (n) 之间有若干条长度相同、互不相交的路径;每条路径具有容量,一次操作可以将某条边容量减一而另一条边容量加一,问最少多少次操作后可以达到最大流量?

    Solution

    将每条链上的各权值升序排序,然后每条链对应位置加在一起,当作一条链处理

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 200005;
    
    int n, m;
    
    vector<pair<int, int>> g[N];
    vector<int> a[N];
    int ind;
    
    void dfs(int p)
    {
        if (p != n)
        {
            for (auto [q, w] : g[p])
            {
                if (p == 1)
                    ++ind;
                a[ind].push_back(w);
                dfs(q);
            }
        }
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        cin >> n >> m;
        int avg = 0;
        for (int i = 1; i <= m; i++)
        {
            int u, v, w;
            cin >> u >> v >> w;
            g[u].push_back({v, w});
            avg += w;
        }
    
        dfs(1);
        int len = a[1].size();
        avg /= len;
    
        for (int i = 1; i <= ind; i++)
            sort(a[i].begin(), a[i].end());
        int ans = 0;
        for (int i = 0; i < len; i++)
        {
            int sum = 0;
            for (int j = 1; j <= ind; j++)
                sum += a[j][i];
            if (sum < avg)
                ans += avg - sum;
        }
        cout << ans << endl;
    }
    
  • 相关阅读:
    关于git
    关于 素材,设计
    utiles
    sqlite
    蓝牙
    一个简单的Maven小案例
    【日志卡住不动】Registering current configuration as safe fallback point
    一分钟部署nacos
    生产日志文件太大NotePad++无法打开
    idea 安装 codota 插件
  • 原文地址:https://www.cnblogs.com/mollnn/p/14567172.html
Copyright © 2011-2022 走看看