首页 > 学院 > 开发设计 > 正文

[BZOJ2563]阿狸和桃子的游戏(贪心)

2019-11-11 03:36:46
字体:
来源:转载
供稿:网友

题目描述

传送门

题解

这题有一个非常巧妙的转化 就是把每一条边的权值分成两半给两个端点,这样的话如果两个端点被一个人选了它会获得这条边的代价,但是如果两个人一人选一个的话对答案是没有影响的

代码

#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int 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);}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表