题目大意:给定一张无向图,每个点有点权,每条边有边权,两个人轮流选择点,若一条边的两端点被选择则这条边被选择,两人都想自己的得分-对手的得分最大,求最终先手得分-后手得分
我的收获:当条件难以处理时,可以改变条件,使其转化为简单问题
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define M 10100
int n,m;
long long ans,a[M];
void work()
{
int x,y,z;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&x,&y,&z),ans-=z,a[x]+=z,a[y]+=z;
sort(a+1,a+n+1);
for(int i=2;i<=n;i+=2) ans+=a[i];
cout<<ans<<endl;
}
void init()
{
cin>>n>>m;
for(int i=1,x;i<=n;i++)
scanf("%d",&x),ans-=x,a[i]=x<<1;
}
int main()
{
init();
work();
return 0;
}