• luogu4643 [国家集训队]阿狸和桃子的游戏


    题目链接:洛谷


    这道题乍一看非常的难,而且题目标题上的标签让人很害怕。

    但其实这道题并不难写(只要想到了。。。emm)

    因为我们只需要知道两个人得分之差,所以我们可以对条件进行变换。

    我们将边权平分到边两端的节点,取到了一个点也相当于取到了点权加上一半的边权,则发现对于边$(u,v)$有以下四种情况:

    1.桃子取到了$u$和$v$,这时这两点的贡献为$w(u)+w(v)+c(u,v)/2+c(u,v)/2=w(u)+w(v)+c(u,v)$,与原来相同。

    2.桃子取到了$u$,阿狸取到了$v$,贡献为$w(u)-w(v)+c(u,v)/2-c(u,v)/2=w(u)-w(v)$,与原来相同。

    对于另外两种情况是一样的。

    所以对于新的点权,我们每次贪心地取当前能取的最大的点权,这个就是答案了。

    为了避免出现小数,我们可以对点权$*2$,最后把答案$/2$

     1 #include<bits/stdc++.h>
     2 #define Rint register int
     3 using namespace std;
     4 const int N = 10003;
     5 int n, m, a[N], ans;
     6 int main(){
     7     scanf("%d%d", &n, &m);
     8     for(Rint i = 1;i <= n;i ++){
     9         scanf("%d", a + i);
    10         a[i] <<= 1;
    11     }
    12     for(Rint i = 1;i <= m;i ++){
    13         int x, y, z;
    14         scanf("%d%d%d", &x, &y, &z);
    15         a[x] += z; a[y] += z;
    16     }
    17     sort(a + 1, a + n + 1);
    18     for(Rint i = 1;i < n;i += 2)
    19         ans += a[i + 1] - a[i];
    20     printf("%d
    ", ans >> 1);
    21 }
    Luogu4643
  • 相关阅读:
    sprint2第五天任务完成情况
    sprint2第四天任务完成情况
    sprint2第三天任务完成情况
    spark编程基础1
    git基本命令
    自定义bean对象实现序列化接口(Writable)
    HDFS 2.X新特性
    win10-idea连接hdfs集群
    centos6-yum源失效问题
    hadoop-源码编译
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/10718978.html
Copyright © 2020-2023  润新知