一个小游戏

题目:

  给出一张图,有点权,有边权。

  两个人轮流用最优策略染色,他们的得分是点权+内部的边权。

思路:

  由于只求两者的差,我们可以把边权分到点权里面去,如果两点被同一人选,那边权就加到一个人身上了。

                          如果每人选一个点,那一减就没了,并无影响。

#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;
}

 

posted @ 2017-07-26 09:54  浪矢-CL  阅读(168)  评论(0编辑  收藏  举报