首页 > 其他 > 详细

Codeforces Global Round 6

时间:2019-12-27 18:49:50      阅读:76      评论:0      收藏:0      [点我收藏+]

借了钱,然后合并,问合并完最少还有几个人之间有金钱纠纷
借的钱和欠的钱总数相等,直接O(n)的把每个人的钱都合并了,只管这个人欠了多少钱,不管欠的谁钱

struct node{
    int x,y;
    ll z;

};
ll sum[MAXN];
void work() {
    vector<int> v1,v2;
    int n,m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int x,y;ll z;
        cin >> x >> y >> z;
        sum[x] -= z; sum[y] += z;
    }
    for(int i = 1; i <= n; i++) {
        if(sum[i] < 0) {
            v1.push_back(i);
            sum[i] = -sum[i];
        }
        else if(sum[i] > 0) v2.push_back(i);
    }
    vector<node>ans;
    int i = 0,j = 0;
    while(i < v1.size() && j < v2.size()) {
        int u = v1[i];
        int v = v2[j];
        node k;
        k.x = u;
        k.y = v;
        k.z = min(sum[u],sum[v]);
        ans.push_back(k);
        ll tmp = min(sum[u],sum[v]);
        sum[u] -= tmp;
        sum[v] -= tmp;
        if(sum[u] == 0) i++;
        if(sum[v] == 0) j++;
    }
    cout << ans.size() << endl;
    for(int i = 0; i < ans.size(); i++) {
        cout << ans[i].x << ' ' << ans[i].y << ' ' << ans[i].z << endl;
    }
}

int main() {
    work();
    return 0;
}

偷偷说李涵学长是个夯货

Codeforces Global Round 6

原文:https://www.cnblogs.com/ASLHZXY/p/12109053.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!