其他分享
首页 > 其他分享> > 『贪心』阿狸和桃子的游戏

『贪心』阿狸和桃子的游戏

作者:互联网

在这里插入图片描述

题解

显然,这道题目的点权很容易去分配,其关键便在于边权的处理上,即如何处理两种边权的情况。

还有一个问题在于,什么叫做当前的最优选择,点权和边权的不同意味着有不同的选择方法,这也让这道题变得非常的棘手。

我们便来思考一下,如何解决这两个问题呢?

那么如何将边权转移到点权上呢?观察到特殊的性质,我们发现题目仅仅要求我们输出差值。因此我们可以利用这个特性作为解决问题的突破口。要两者都选相抵消,只有一个人则累加,我们可以将边权一半一半的平均分配到点权里。这样,这个问题就迎刃而解了。

代码如下:

#include <bits/stdc++.h>

using namespace std;
const int N = 100000;

int n, m;
int a[N];

int main(void)
{
    scanf("%d %d", &n, &m);
    for (int i=1;i<=n;++i) 
        scanf("%d", a+i), a[i] *= 2;
    while (m --) {
        int x, y, v;
        scanf("%d %d %d", &x, &y, &v);
        a[x] += v, a[y] += v;
    }
    sort(a+1,a+n+1);
    reverse(a+1,a+n+1);
    int sum1 = 0, sum2 = 0;
    for (int i=1;i<=n;++i) 
        i % 2 == 1 ? sum1 += a[i] : sum2 += a[i];
    cout<<(sum1-sum2) / 2<<endl;
    return 0;
}

标签:阿狸,int,边权,我们,评判,最优,桃子,点权,贪心
来源: https://blog.csdn.net/Ronaldo7_ZYB/article/details/95084688