zoukankan      html  css  js  c++  java
  • XTUOJ 1252 Defense Tower 贪心

    题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1252

    思路:考虑每条边对玩家的伤害

             假设连接的节点是u,v,破坏力是p[u]和p[v]

             假设p[u]>p[v]

             现在考虑u,v的删除顺序,如果先删u,这条边对玩家的伤害,是p[v],先删v,伤害是p[u]

             所以显然对于每条边,我们都要先删权值大的,才能最好

             怎么样才能对于每条边先删最大的呢,那就按照权值递减删就好了

             所以 ret=Σ(min(p[u],p[v]))

            复杂度O(n)

    #include <cstdio>
    using namespace std;
    const int N=1e5+5;
    int p[N];
    int main(){
       int n;
       while(~scanf("%d",&n)){
        for(int i=1;i<=n;++i)
          scanf("%d",&p[i]);
        int ret=0;
        for(int i=1;i<n;++i){
          int u,v;
          scanf("%d%d",&u,&v);
          ret+=min(p[u],p[v]);
        }
        printf("%d
    ",ret);
       }
       return 0;
    }
    View Code
  • 相关阅读:
    java基础知识
    谈谈休眠/睡眠/关机和laptop硬件寿命
    常用的git指令查询
    java swing scroll can not work
    不必要的windows服务
    工作分配问题
    回溯算法
    第四章上机实践
    算法第四章作业
    第三章上机实践
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5585781.html
Copyright © 2011-2022 走看看