hdu 4647 Another Graph Game

简介: 点击打开hdu 4647 思路: 贪心 1 若没有边权,则对点权从大到小排序即可 2 考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。

点击打开hdu 4647

思路: 贪心

1 若没有边权,则对点权从大到小排序即可

2 考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。因为当两个人分别选择不同的点时,这一权值将互相抵消
3 如果把边折半的时候可能是把边权为奇数,那么我们在处理的时候就把所有的权值乘以2,然后最后ans/2即可

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long int64;
const int MAXN = 100010;

int n , m;
int64 val[MAXN];

int main(){
    int x , y , v;
    while(scanf("%d%d" , &n , &m) != EOF){
         for(int i = 1 ; i <= n ; i++){
             scanf("%d" , &v);
             val[i] = 2*v;
         }
         for(int i = 0 ; i < m ; i++){
             scanf("%d%d%d" , &x, &y , &v); 
             val[x] += v;
             val[y] += v;
         }
         sort(val+1 , val+n+1);
         int64 sum1 , sum2;
         sum1 = sum2 = 0;
         for(int i = 1 ; i <= n ; i += 2){
             sum1 += val[i]; 
             if(i <= n)
                sum2 += val[i+1]; 
         }
         printf("%lld\n" , abs(sum1-sum2)/2);
    } 
    return 0;
}



目录
相关文章
|
算法
uva 10891 game of sum
题目链接 详细请参考刘汝佳《算法竞赛入门经典训练指南》 p67
31 0
LeetCode 390. Elimination Game
给定一个从1 到 n 排序的整数列表。 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。 我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。 返回长度为 n 的列表中,最后剩下的数字。
102 0
LeetCode 390. Elimination Game
|
算法 索引
LeetCode 45. Jump Game II
给定一个非负整数数组,初始位置在索引为0的位置,数组中的每个元素表示该位置的能够跳转的最大部署。目标是以最小跳跃次数到达最后一个位置(索引)。
80 0
LeetCode 45. Jump Game II
|
Java
HDU 5882 Balanced Game
Balanced Game Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 508    Accepted Submission(s): ...
836 0
LeetCode - 45. Jump Game II
45. Jump Game II  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个数组a,玩家的初始位置在idx=0,玩家需要到达的位置是idx=a.
938 0
|
机器学习/深度学习