BZOJ3252 攻略
标签:贪心,dfs
Description
题目简述:树版[k取方格数]
众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏。
今天他得到了一款新游戏《XX半岛》,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景。所有场景和选择支构成树状结构:开始游戏时在根节点(共通线),叶子节点为结局。每个场景有一个价值,现在桂马开启攻略之神模式,同时攻略k次该游戏,问他观赏到的场景的价值和最大是多少(同一场景观看多次是不能重复得到价值的)
“为什么你还没玩就知道每个场景的价值呢?”
“我已经看到结局了。”
Input
第一行两个正整数n,k
第二行n个正整数,表示每个场景的价值
以下n-1行,每行2个整数a,b,表示a场景有个选择支通向b场景(即a是b的父亲)
保证场景1为根节点
Output
输出一个整数表示答案
Sample Input
5 2
4 3 2 1 1
1 2
1 5
2 3
2 4
Sample Output
10
HINT
对于100%的数据,n<=200000,1<=场景价值<=2^31-1
Source
dfs序+线段树
分析:这题是钟长者出的模拟题,但因为不明原因搞上了bzoj
很多人都是线段树+dfs序的做法
实际上并不需要
可以先dfs一遍,处理出w[x]表示以x为根节点的子树中取一条价值和最大的链
每次选择x中w[son]最大的一个转移:w[x]=max(w[son])+a[x]
然后将w排序,转化为c数组,取前k大
Code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define rep(i,a,b) for(register int i=a;i<=b;i++)
#define dep(i,a,b) for(register int i=a;i>=b;i--)
#define mem(x,num) memset(x,num,sizeof x)
#define v e[i].to
#define ll long long
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
using namespace std;
inline ll read()
{ll f=1,x=0;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
const ll maxn=2e5+6;
ll head[maxn],a[maxn],n,k,w[maxn],cnt=0,c[maxn],tot=0;
struct edge{ll to,next;}e[maxn<<1];
#define v e[i].to
#define reg(x) for(int i=head[x];i;i=e[i].next)
inline bool cmp(ll x,ll y){return x>y;}
void dfs(int x,int fa)
{ll Max=0,mx;reg(x){if(v==fa)continue;dfs(v,x);if(w[v]>Max)Max=w[v],mx=v;}w[x]=Max+a[x];reg(x){if(v==fa||v==mx)continue;c[++tot]=w[v];}
}int main()
{n=read(),k=read();rep(i,1,n)a[i]=read();rep(i,1,n-1){int U=read(),V=read();e[++cnt]=(edge){V,head[U]};head[U]=cnt;e[++cnt]=(edge){U,head[V]};head[V]=cnt;}tot=0;dfs(1,1);c[++tot]=w[1];sort(c+1,c+1+tot,cmp);ll ans=0;k=min(k,tot);rep(i,1,k)ans+=c[i];cout<<ans<<endl;return 0;
}
BZOJ3252 攻略相关推荐
- BZOJ3252: 攻略
BZOJ3252: 攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...
- bzoj3252 攻略
http://www.elijahqi.win/2018/03/15/bzoj3252/ Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他 ...
- bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...
- BZOJ3252攻略——长链剖分+贪心
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...
- [bzoj3252]攻略
题目描述 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达 ...
- bzoj3252 攻略 dfs序+线段树
题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...
- bzoj3252攻略 贪心+dfs序+线段树
题目链接:戳这里 3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 605 Solved: 255 [Submit][Status] ...
- bzoj3252攻略(线段树+dfs序)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 562 Solved: 238 [Submit][Status][Discuss] ...
- dfs序+线段树 BZOJ3252 攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 496 Solved: 211 [Submit][Status][Discuss] ...
最新文章
- memcached在windows下的基本使用方法
- centos 配置redis
- 面试总结-百度(2)
- 云计算基础设施智能运维的下一段征程,你们准备好了吗?
- 动人配乐是如何炼成的?带您了解《花之灵》背景原声的幕后制作秘辛
- sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
- 关于mysql ERROR 1045 (28000)错误的解决办法
- querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...
- 附录:更多集合操作命令
- 从零开始构建自己的爬虫代理IP数据库并定期检验IP有效性...
- 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
- Rbf神经网络使用Tensorflow实现
- 批处理bat中@echo on/off是什么意思?
- 展锐Android-Q LCD调试
- [CSP-S模拟测试]:赤壁情(DP)
- 「免费 | 重磅」9月19日首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)「中国科学院自动化研究所」...
- wps和office哪个好用 wps和office兼容吗
- 人脸识别登录:加强系统认证
- Oracle LiveLabs实验:Manage and Monitor Autonomous Database
- Fragment的基本用法
热门文章
- 百度新闻源“漏洞”爆粉!日流水十几万的微商都在偷偷用
- 微信登录,qq登录,微博登录之 tp3.2
- LabVIEW测试面板丢失,修复或重置NI MAX
- java poi 导出excel模版
- Sentry安装并集成到Django Web项目
- Android使用Google定位服务定位并将经纬度转换为详细地址信息(国省市县街道)
- VIVADO无法生成比特流
- Nature Medicine:利用静息态fMRI功能连接定义抑郁症神经生物学亚型
- uglifyjs php,使用UglifyJS合并/压缩JavaScript
- uefi启动linux过程_Linux UEFI与备份还原(引导修复)