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

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

时间:2019-10-29 19:34:46      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:div   ++i   bit   input   ++   c_str   code   string   bsp   

这个真的好巧妙啊~ 

如果只考虑点权的话显然直接按照权值大小排序即可. 

但是加入了边权,就有了一个决策的问题. 

于是,我们将边权分一半,分给两个端点.   

如果一个人拿了两个端点,则边权都会加上. 

否则,边权会抵消.   

直接按照点权+一半边权排序即可.    

code: 

#include <bits/stdc++.h>  
#define N 100004   
#define LL long long 
using namespace std;  
void setIO(string s) 
{
    string in=s+".in"; 
    freopen(in.c_str(),"r",stdin);    
}    
LL a[N];   
int main() 
{ 
    // setIO("input");       
    int n,m,i,j; 
    scanf("%d%d",&n,&m);     
    for(i=1;i<=n;++i) scanf("%lld",&a[i]),a[i]<<=1;   
    for(i=1;i<=m;++i) 
    {
        int x,y; 
        LL z; 
        scanf("%d%d%lld",&x,&y,&z);  
        a[x]+=z,a[y]+=z;  
    } 
    sort(a+1,a+1+n); 
    LL ans=0ll; 
    for(i=1;i<n;i+=2) 
    {
        ans+=a[i+1]-a[i];  
    } 
    printf("%lld\n",ans/2); 
    return 0;   
}

  

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

标签:div   ++i   bit   input   ++   c_str   code   string   bsp   

原文地址:https://www.cnblogs.com/guangheli/p/11760763.html

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