题目描述

题目简述:树版[k取方格数]
众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏。今天他得到了一款新游戏《XX
半岛》,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景。所有场景和选择支构成树状
结构:开始游戏时在根节点(共通线),叶子节点为结局。每个场景有一个价值,现在桂马开启攻略之神模式,同
时攻略k次该游戏,问他观赏到的场景的价值和最大是多少(同一场景观看多次是不能重复得到价值的)
“为什么你还没玩就知道每个场景的价值呢?”
“我已经看到结局了。”

输入

第一行两个正整数n,k
第二行n个正整数,表示每个场景的价值
以下n-1行,每行2个整数a,b,表示a场景有个选择支通向b场景(即a是b的父亲)
保证场景1为根节点
n<=200000,1<=场景价值<=2^31-1

输出

输出一个整数表示答案

样例输入

5 2
4 3 2 1 1
1 2
1 5
2 3
2 4

样例输出

10
  因为重复选同一个点不计入答案多次,也就相当于选k条链(互不相交),使每条链长尽可能大。每个节点的深度就是从这个点到根路径上的点权和,而每条链的长度则是链上所有点的点权和。那么我们就可以对整棵树进行长链剖分,然后记录每条长链的长度,取前k大条链就好了。如果不了解长链剖分可以参见->长链剖分。

#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int n,k;
int q[200010];
int cnt;
int tot;
int head[200010];
int next[400010];
int to[400010];
int x,y;
int v[200010];
int son[200010];
ll d[200010];
int f[200010];
ll mx[200010];
ll val[200010];
ll ans;
void add(int x,int y)
{tot++;next[tot]=head[x];head[x]=tot;to[tot]=y;
}
bool cmp(int x,int y)
{return val[x]>val[y];
}
void dfs(int x,int fa)
{d[x]=d[fa]+v[x];f[x]=fa;mx[x]=d[x];for(int i=head[x];i;i=next[i]){if(to[i]!=f[x]){dfs(to[i],x);mx[x]=max(mx[x],mx[to[i]]);if(mx[to[i]]>mx[son[x]]){son[x]=to[i];}}}
}
void dfs2(int x,int tp)
{val[tp]+=v[x];if(son[x]){dfs2(son[x],tp);}for(int i=head[x];i;i=next[i]){if(to[i]!=son[x]&&to[i]!=f[x]){q[++cnt]=to[i];dfs2(to[i],to[i]);}}
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&v[i]);}for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(1,0);q[++cnt]=1;dfs2(1,1);sort(q+1,q+1+cnt,cmp);for(int i=1;i<=k;i++){ans+=val[q[i]];}printf("%lld",ans);
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/9576384.html

BZOJ3252攻略——长链剖分+贪心相关推荐

  1. 长链剖分 - 攻略(BZOJ3252)

    Analysis 其实和长链剖分关系不大 就是一个贪心 按照点权和的大小划分轻重链,然后将所有的链排个序,选前k个即可 Code #include<bits/stdc++.h> #defi ...

  2. [BZOJ3252][长链剖分]攻略

    BZOJ3252 长链剖分之后把每条长链拿出来然后排个序选就完了 Code: #include<bits/stdc++.h> #define ll long long using name ...

  3. UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)

    Description 一棵 n 个点的有根树,带点权 wi. 从 s 出发,希望达到 t,每秒可以从当前点移动到某一个儿子. 有一个死亡次数,初始为 0.若在某个点 i(i != s, t) 时,死 ...

  4. 长链剖分(知识点整理+板子总结)

    思路来源 https://blog.nowcoder.net/n/5eaebd22f5f846838c637bc337cc1ee9 https://blog.csdn.net/litble/artic ...

  5. BZOJ3252: 攻略

    BZOJ3252: 攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...

  6. 对LCA、树上倍增、树链剖分(重链剖分长链剖分)和LCT(Link-Cut Tree)的学习

    LCA what is LCA & what can LCA do LCA(Lowest Common Ancestors),即最近公共祖先 在一棵树上,两个节点的深度最浅的公共祖先就是 L ...

  7. BZOJ4543/BZOJ3522 [POI2014]Hotel加强版(长链剖分)

    题目好神仙--这个叫长链剖分的玩意儿更神仙-- 考虑dp,设\(f[i][j]\)表示以\(i\)为根的子树中到\(i\)的距离为\(j\)的点的个数,\(g[i][j]\)表示\(i\)的子树中有\ ...

  8. Bzoj4016/洛谷P2993 [FJOI2014] 最短路径树问题(最短路径问题+长链剖分/点分治)

    题面 Bzoj 洛谷 题解 首先把最短路径树建出来(用\(Dijkstra\),没试过\(SPFA\)\(\leftarrow\)它死了),然后问题就变成了一个关于深度的问题,可以用长链剖分做,所以我 ...

  9. BZOJ4381[POI2015]Odwiedziny——分块+长链剖分

    题目描述 给定一棵n个点的树,树上每条边的长度都为1,第i个点的权值为a[i]. Byteasar想要走遍这整棵树,他会按照某个1到n的全排列b走n-1次,第i次他会从b[i]点走到b[i+1]点,并 ...

最新文章

  1. 手把手从零开始搭建k8s集群超详细教程
  2. java数组与字符串编程及答案_04747_Java语言程序设计(一)_第4章_数组和字符串...
  3. R语言基于多字段(多数据列、multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案
  4. ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
  5. android siri 源码,Android的SIRI 。
  6. 泰州市区首次试用“闯红灯人脸识别系统”;“冷扑大师”想用AI提高肾脏移植效率 | AI掘金晚报
  7. [云炬创业基础笔记]第十一章创业计划书测试3
  8. MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
  9. 戴尔r410服务器raid装系统,Dell R410 Raid磁盘阵列驱动
  10. 系统漏洞利用与提权攻击机场景
  11. 推荐几个常用常玩的小游戏网址包括4399.com
  12. 基于ROS搭建简易软件框架实现ROV水下目标跟踪(补1)--gazebo仿真
  13. 读书笔记:技术的本质-技术是什么,它是如何进化的 (布莱恩•阿瑟)
  14. Project使用总结-如何统计项目总工时,设置Project起始日期,修改项目日期格式
  15. ubuntu下添加日语输入法
  16. 组合游戏(Nim游戏)——SG函数
  17. 二级计算机c语言解题技巧,2010年全国计算机等级考试二级C语言考试题型解题技巧...
  18. php编程里的push,【编程词典】php array_push()函数
  19. python pprint模块详解
  20. 少儿机器人编程学习指南

热门文章

  1. Linux系统安装配置curl
  2. PostgreSQL 9.6.6启动
  3. mysql xa测试方案_mysql xa导致的事务一直running问题
  4. ajax--跨域问题及三种简单的解决方案
  5. 解决文件夹无限嵌套无法删除的问题---最新办法
  6. STP:生成树协议解决网络冗余问题
  7. winform上传文件解决方案
  8. 【异常检测】Isolation forest 的spark 分布式实现
  9. MongoDB compass 连接不上远程服务器的解决方法
  10. 前端常见跨域解决方案