【BZOJ 2563】 阿狸和桃子的游戏 脑洞+贪心
2017-01-06 18:38
411 查看
一个不错的题目。因为是求两人得分的差值,所以我们将边权对半分,分别加在所连接的两点上,这样如果两边是不同的人拿的话,相减就等于没有拿,而如果是相同的人拿,就相当于拿全了,但是为了避免浮点数,所以采用点权乘二,最后答案/2
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 100020
#define LL long long
using namespace std;
LL val[maxn],n,m;
bool cmp(const LL& a,const LL& b){return a>b;}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)scanf("%lld",val+i),val[i]*=2;
LL a,b,c;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&a,&b,&c);
val[a]+=c,val[b]+=c;
}
sort(val+1,val+1+n,cmp);LL ans=0;
for(int i=1;i<=n;i++){
if(i&1)ans+=val[i];
else ans-=val[i];
}
printf("%lld",ans/2);
return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 100020
#define LL long long
using namespace std;
LL val[maxn],n,m;
bool cmp(const LL& a,const LL& b){return a>b;}
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)scanf("%lld",val+i),val[i]*=2;
LL a,b,c;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&a,&b,&c);
val[a]+=c,val[b]+=c;
}
sort(val+1,val+1+n,cmp);LL ans=0;
for(int i=1;i<=n;i++){
if(i&1)ans+=val[i];
else ans-=val[i];
}
printf("%lld",ans/2);
return 0;
}
相关文章推荐
- 【bzoj2563】【阿狸和桃子的游戏】【贪心】
- BZOJ 2563 阿狸和桃子的游戏 (贪心)
- BZOJ 2563: 阿狸和桃子的游戏(巧妙的贪心)
- [BZOJ2563]阿狸和桃子的游戏(贪心)
- BZOJ 2563: 阿狸和桃子的游戏 贪心 思路题
- 【bzoj2563】阿狸和桃子的游戏 贪心
- [bzoj2563][贪心]阿狸和桃子的游戏
- BZOJ 2563 阿狸和桃子的游戏 题解(贪心)
- [bzoj2563] 阿狸和桃子的游戏 贪心
- BZOJ 2563 阿狸和桃子的游戏 贪心
- 【BZOJ2563】阿狸和桃子的游戏 贪心
- bzoj 2563 阿狸和桃子的游戏 - 贪心
- <BZOJ 2563 阿狸和桃子的游戏> (贪心)
- 【bzoj2563】阿狸和桃子的游戏 脑洞
- 【BZOJ2563】阿狸和桃子的游戏 贪心
- 【bzoj2563】 阿狸和桃子的游戏 贪心
- bzoj 2563 阿狸和桃子的游戏
- BZOJ 2563 阿狸和桃子的游戏
- BZOJ 2563 阿狸和桃子的游戏
- bzoj2563 阿狸和桃子的游戏