一个小游戏
题目:
给出一张图,有点权,有边权。
两个人轮流用最优策略染色,他们的得分是点权+内部的边权。
思路:
由于只求两者的差,我们可以把边权分到点权里面去,如果两点被同一人选,那边权就加到一个人身上了。
如果每人选一个点,那一减就没了,并无影响。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<math.h> using namespace std; int n,m; double w[20000],ans; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%lf",&w[i]); for(int i=1,u,v,c;i<=m;i++) { scanf("%d%d%d",&u,&v,&c); w[u]+=c/2.0;w[v]+=c/2.0; } sort(w+1,w+1+n); int i=n; for(i=n;i>=1;i-=2) { ans+=w[i]-w[i-1]; } cout<<ans; return 0; }