阿狸和桃子的游戏题解
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;
以上是关于阿狸和桃子的游戏题解的主要内容,如果未能解决你的问题,请参考以下文章