博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3252攻略——长链剖分+贪心
阅读量:7006 次
发布时间:2019-06-27

本文共 1632 字,大约阅读时间需要 5 分钟。

题目描述

题目简述:树版[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
#include
#include
#include
#include
#include
#define ll long longusing 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

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

你可能感兴趣的文章
我的友情链接
查看>>
python中的asyncore
查看>>
zabbix专题:第二章 zabbix3.0安装详解
查看>>
sublime text 快捷收集
查看>>
VMware ESXI 5.5 系统安装(6.0)
查看>>
python解析Testlink导出的xml并写入excel
查看>>
linux环境变量设置
查看>>
Puppet3.0原理介绍与安装配置
查看>>
时间:2014年3月29日8:55:16 递归与迭代
查看>>
linux第一季运维001
查看>>
5,表达式中的陷阱
查看>>
安卓播放音效
查看>>
scrapy mysql
查看>>
一个比较好的手机归属地查询网站
查看>>
H3C SE 教程笔记——构建安全优化的广域网(上)
查看>>
Jhipster创建一个应用
查看>>
ANR 处理
查看>>
IOS版添加phonegap-银联支付插件教程
查看>>
vim编辑器介绍和使用
查看>>
Linux培训之批量删除文件命令
查看>>