题目描述
题解
这题有一个非常巧妙的转化
就是把每一条边的权值分成两半给两个端点,这样的话如果两个端点被一个人选了它会获得这条边的代价,但是如果两个人一人选一个的话对答案是没有影响的
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 100005
int n,m,x,y,z,ans;
int w[N],val[N];
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;++i) scanf("%d",&w[i]),val[i]=2*w[i];
for (int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
val[x]+=z;val[y]+=z;
}
sort(val+1,val+n+1);
for (int i=2;i<=n;i+=2)
ans+=val[i]-val[i-1];
printf("%d\n",ans/2);
}