BZOJ 2563 阿狸和桃子的遊戲

題目在這裏呀

題意

題面裏的那個公式就是題意了qaq

題解

算是一道套路題吧w
把邊上的權值轉移到點上去,一個點上加邊一半的權值。
爲什麼可以這樣呢?
1、如果一條邊連接的兩個點是同一個人,那麼他能得到這條邊的權值,由於分到兩個點上了,對答案沒有影響。
2、如果一條邊連接的兩個點不是同一個人取的,那麼互相抵消,這條邊沒有貢獻,也正確。

最後排序貪心一下就行啦ww

//Suplex
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n,m,a,b,c,k,w[100000];
long long ans;

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) {scanf("%d",&w[i]);w[i]=w[i]+w[i];}
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&a,&b,&c);
        w[a]+=c;w[b]+=c;
    }
    sort(w+1,w+1+n);
    int k=n;
    while(k){
        ans+=(w[k]-w[k-1]);
        k-=2;
    }
    printf("%lld\n",ans/2);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章