阿狸和桃子的游戏题解

Posted ljk123-de-bo-ke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿狸和桃子的游戏题解相关的知识,希望对你有一定的参考价值。

阿狸和桃子的游戏题解

每一道代码简单的黑题都有着诡异的思想,真不知道出题者怎么想的。

而这道题的重点在于把边权转换为点权,

此题的方式是将边权w平均分给被连接的两点u和v。

若u和v都被一人选择,则他的分数较不加边权前多了w/2+w/2=w,

若被不同的人选择,分数差多了(ans1+w/2)-(ans2-w/2)=ans1-ans2

并不会对答案有什么影响。

所以,最优策略? 肯定选择点权最大的了。

排序后依次选择即可。

#include<bits/stdc++.h>
using namespace std;
const int N=100006;
int n,m,t1,t2,t3;
double f[N],ans[2];
inline int read()
   int T=0,F=1; char ch=getchar();
   while(ch<'0'||ch>'9')if(ch=='-') F=-1; ch=getchar();
   while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();
   return F*T;

bool cmp(double u,double v)return u>v;
int main()
    n=read(),m=read();
    for(int i=1;i<=n;++i) t1=read(),f[i]=1.00*t1;
    for(int i=1;i<=m;++i) t1=read(),t2=read(),t3=read(),f[t1]+=0.50000*t3,f[t2]+=0.5000000*t3;
    sort(f+1,f+n+1,cmp);
    for(int i=1;i<=n;++i) ans[i&1]+=f[i];
    t1=(int)(ans[1]-ans[0]),printf("%d\n",t1);
    return 0;

以上是关于阿狸和桃子的游戏题解的主要内容,如果未能解决你的问题,请参考以下文章

Bzoj2563 阿狸和桃子的游戏

bzoj2563 阿狸和桃子的游戏

bzoj2563 阿狸和桃子的游戏

BZOJ——2563: 阿狸和桃子的游戏

BZOJ[2563] 阿狸和桃子的游戏

bzoj 2563: 阿狸和桃子的游戏 贪心