码迷,mamicode.com
首页 > 其他好文 > 详细

阿狸和桃子的游戏题解

时间:2019-08-07 20:55:01      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:选择   ++i   策略   最大   ace   space   ble   include   etc   

阿狸和桃子的游戏题解

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

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

此题的方式是将边权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;
}

阿狸和桃子的游戏题解

标签:选择   ++i   策略   最大   ace   space   ble   include   etc   

原文地址:https://www.cnblogs.com/ljk123-de-bo-ke/p/11317512.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!