思维题,好题
把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了
正确性证明:
如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了
如果分别被两个人选了,一作差就抵消了,相当于谁都没有
代码
#include <bits/stdc++.h>
#define rep(i,x,y) for(i=(x);i<=(y);++i)
using namespace std;
double a[10010];
int main(){
int n,m,i,x,y,z;
double ans[2];
scanf("%d%d",&n,&m);
rep(i,1,n) scanf("%lf",&a[i]);
rep(i,1,m){
scanf("%d%d%d",&x,&y,&z);
a[x]+=1.0*z/2.0,a[y]+=1.0*z/2.0;
}
sort(a+1,a+n+1);
for(i=n;i>=1;--i) ans[i&1]+=a[i];
printf("%.0f",ans[n&1]-ans[(n&1)^1]);
}