bzoj 3252: 攻略 -- 长链剖分+贪心
3252: 攻略
Time Limit: 10 Sec Memory Limit: 128 MB
Description
Input
Output
Sample Input
4 3 2 1 1
1 2
1 5
2 3
2 4
Sample Output
HINT
对于100%的数据,n<=200000,1<=场景价值<=2^31-1
Source
首先想到的是树链剖分,似乎复杂度不是很优qaq
然后bzoj的标签是 dfs序+线段树 似乎还是不会。。(似乎我太弱辣
orz了一下zgz的题解,随便搞搞长链剖分,每次贪心取最长链,一定是最优解,然后长链剖分保证了链不相交,和最长链的最优性
发现好有道理qaq,然后就是长链剖分的裸题 orz 长公主 https://www.zgz233.xyz/2017/10/12/bzoj-3252-%E6%94%BB%E7%95%A5/
这似乎是我真正意义上的第一道长链剖分 >_<
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define inf 1000000007
#define ll long long
#define N 200010
inline int rd()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int fro[N],to[N],lj[N],cnt;
void add(int a,int b){fro[++cnt]=lj[a];to[cnt]=b;lj[a]=cnt;}
int n,m,fa[N],rt;
ll a[N],mx[N];
int son[N];
priority_queue<ll>q;
void dfs1(int x,int f)
{
fa[x]=f;
for(int i=lj[x];i;i=fro[i])
{
dfs1(to[i],x);
if(mx[to[i]]>mx[son[x]]) son[x]=to[i];
}
mx[x]=a[x]+mx[son[x]];
}
void dfs2(int x,int tp)
{
if(x!=tp) a[x]+=a[fa[x]];
if(!son[x]){q.push(a[x]);return;}
dfs2(son[x],tp);
for(int i=lj[x];i;i=fro[i])
{
if(to[i]==son[x]) continue;
dfs2(to[i],to[i]);
}
}
ll ans;
bool ru[N];
int main()
{
n=rd();m=rd();
for(int i=;i<=n;i++) a[i]=rd();
for(int i=,x,y;i<n;i++)
{
x=rd();y=rd();
add(x,y);ru[y]=;
}
for(int i=;i<=n;i++) if(!ru[i]) rt=i;
dfs1(rt,);dfs2(rt,rt);
for(int i=;i<=m&&!q.empty();i++)
{
ans+=q.top();
q.pop();
}
printf("%lld\n",ans);
return ;
}
bzoj 3252: 攻略 -- 长链剖分+贪心的更多相关文章
- bzoj 3252 攻略 长链剖分思想+贪心
攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 889 Solved: 423[Submit][Status][Discuss] Descrip ...
- BZOJ3252攻略——长链剖分+贪心
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...
- BZOJ[3252]攻略(长链剖分)
BZOJ[3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX半岛> ...
- BZOJ.3252.攻略(贪心 长链剖分/线段树)
题目链接 贪心,每次选价值最大的一条到根的链.比较显然(不选白不选). 考虑如何维护这个过程.一个点的价值选了就没有了,而它只会影响它子树里的点,可以用DFS序+线段树修改.而求最大值也可以用线段树. ...
- 219.01.19 bzoj3252: 攻略(长链剖分+贪心)
传送门 长链剖分好题. 题意:给一棵带点权的树,可以从根节点到任一叶节点走kkk次,走过的点只能计算一次,问kkk次走过的点点权值和最大值. 思路: 考虑将整棵树带权长链剖分,这样链与链之间是不会重复 ...
- 【贪心】 BZOJ 3252:攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 261 Solved: 90[Submit][Status][Discuss] De ...
- 【刷题】BZOJ 3252 攻略
Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(s ...
- bzoj 3252: 攻略
3252: 攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>, ...
- BZOJ3252 攻略 [树链剖分]
题目传送门 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1169 Solved: 554[Submit][Status][Discuss] ...
随机推荐
- C++学习之路(十一):C++的初始化列表
结论: 1.在C++中,成员变量的初始化顺序与变量在类型中的声明顺序相同,而与他们在构造函数的初始化列表中的顺序无关. 2.构造函数分为两个阶段执行:1)初始化阶段:2)普通的计算阶段,表现为赋值操作 ...
- TcxScheduler的使用2
DevExpress 行事历(Scheduler)的常用属性.事件和方法 参考资料来源:附带的ExpressScheduler 2 Demo, 如想了解更多可以查看Demo. 一.TcxSchedu ...
- avalonJS-源码阅读(二)
上一篇文章讲述的avalon刷页面所用到的几个函数.这篇则是主要讲avalon对刷DOM刷出来的avalon自定义属性如何处理的. 目录[-] avalon页面处理(2) 数据结构 解析avalon标 ...
- 大数据系列之分布式大数据查询引擎Presto
关于presto部署及详细介绍请参考官方链接 http://prestodb-china.com PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持G ...
- openjudge-NOI 2.5-1700 八皇后问题
题目链接:http://noi.openjudge.cn/ch0205/1700/ 题解: 经典深搜题目…… #include<cstdio> ][]; int num; void pri ...
- BigDecimal常用方法
一.介绍 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteg ...
- irport报表,把数字金额转换成大写人民币金额
1.编写oracle函数 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is strYuan ) ...
- php内存管理机制与垃圾回收机制
PHP内存管理机制 1 var_dump(memory_get_usage()); //获取内存 2 $a = "laruence"; //定义一个变量 3 var_dump(me ...
- 最后一面《HR面》------十大经典提问
1.HR:你希望通过这份工作获得什么? 1).自杀式回答:我希望自己为之工作的企业能够重视质量,而且会给做得好的员工予以奖励.我希望通过这份工作锻炼自己,提升自己的能力,能让公司更加重视我. a.“我 ...
- Python学习笔记:bisect模块实现二分搜索
在Python中可以利用bisect模块来实现二分搜索,该模块包含函数只有几个: import bisect L = [1,3,4,5,5,5,8,10] x = 5 bisect.bisect_le ...