BZOJ3252: 攻略
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
- #include<cstdio>
- #include<cctype>
- #include<queue>
- #include<cstring>
- #include<algorithm>
- #define rep(i,s,t) for(int i=s;i<=t;i++)
- #define dwn(i,s,t) for(int i=s;i>=t;i--)
- #define ren for(int i=first[x];i;i=next[i])
- using namespace std;
- const int BufferSize=1<<16;
- char buffer[BufferSize],*head,*tail;
- inline char Getchar() {
- if(head==tail) {
- int l=fread(buffer,1,BufferSize,stdin);
- tail=(head=buffer)+l;
- }
- return *head++;
- }
- inline int read() {
- int x=0,f=1;char c=Getchar();
- for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;
- for(;isdigit(c);c=Getchar()) x=x*10+c-'0';
- return x*f;
- }
- typedef long long ll;
- const int maxn=200010;
- int n,k,A[maxn],first[maxn],next[maxn],to[maxn],e;
- void AddEdge(int v,int u) {to[++e]=v;next[e]=first[u];first[u]=e;}
- int st[maxn],en[maxn],pos[maxn],fa[maxn],del[maxn],cnt;
- ll val[maxn];
- void dfs(int x) {
- st[x]=++cnt;pos[cnt]=x;val[x]+=A[x];
- ren val[to[i]]=val[x],fa[to[i]]=x,dfs(to[i]);
- en[x]=cnt;
- }
- struct Ans {int p;ll v;}maxv[maxn<<2];
- Ans better(Ans A,Ans B) {
- if(A.v>B.v) return A;
- return B;
- }
- ll addv[maxn<<2];
- void maintain(int o,int l,int r) {
- int lc=o<<1,rc=lc|1;
- if(l<r) maxv[o]=better(maxv[lc],maxv[rc]);
- else maxv[o]=(Ans){l,0};
- if(addv[o]) maxv[o].v+=addv[o];
- }
- void build(int o,int l,int r) {
- if(l==r) addv[o]=val[pos[l]];
- else {
- int mid=l+r>>1,lc=o<<1,rc=lc|1;
- build(lc,l,mid);build(rc,mid+1,r);
- }
- maintain(o,l,r);
- }
- void update(int o,int l,int r,int ql,int qr,int v) {
- if(ql<=l&&r<=qr) addv[o]+=v;
- else {
- int mid=l+r>>1,lc=o<<1,rc=lc|1;
- if(addv[o]) addv[lc]+=addv[o],addv[rc]+=addv[o],addv[o]=0;
- if(ql<=mid) update(lc,l,mid,ql,qr,v);
- else maintain(lc,l,mid);
- if(qr>mid) update(rc,mid+1,r,ql,qr,v);
- else maintain(rc,mid+1,r);
- }
- maintain(o,l,r);
- }
- int main() {
- n=read();k=read();
- rep(i,1,n) A[i]=read();
- rep(i,1,n-1) AddEdge(read(),read());
- dfs(1);build(1,1,n);ll ans=0;
- while(k--) {
- Ans x=maxv[1];ans+=x.v;
- if(!x.v) break;
- int u=pos[x.p];
- while(u&&!del[u]) {
- del[u]=1;
- update(1,1,n,st[u],en[u],-A[u]);
- u=fa[u];
- }
- }
- printf("%lld\n",ans);
- return 0;
- }
BZOJ3252: 攻略的更多相关文章
- [bzoj3252]攻略_dfs序_线段树_贪心
攻略 bzoj-3252 题目大意:给定一棵n个节点的有根树,点有点权.让你选出至多k个节点,使得他们到根的链的并最大. 注释:$1\le n\le 2\cdot 10^5$,$1\le val_i\ ...
- BZOJ3252攻略——长链剖分+贪心
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...
- BZOJ3252 攻略 [树链剖分]
题目传送门 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1169 Solved: 554[Submit][Status][Discuss] ...
- bzoj3252 攻略 dfs序+线段树
题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...
- bzoj3252攻略(线段树+dfs序)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 562 Solved: 238[Submit][Status][Discuss] D ...
- BZOJ3252 攻略(贪心+dfs序+线段树)
考虑贪心,每次选价值最大的链.选完之后对于链上点dfs序暴力修改子树.因为每个点最多被选一次,复杂度非常正确. #include<iostream> #include<cstdio& ...
- BZOJ3252: 攻略 可并堆
网上有很多人说用dfs序+线段树做...其实stl的堆可以...可并堆可以...很多奇奇怪怪的东西都能做... 可并堆比较好想...也比较好写... 分析: 首先,这是一个网络流做不了的题...数据太 ...
- BZOJ3252 攻略 贪心、长链剖分
传送门 给树竟直接给父子关系!!!真良心 首先一个贪心策略:每一次选择的链一定是所有链中权值最大的.这应该比较显然 那么我们接下来考虑如何维护这个贪心.我们可以使用长链剖分进行维护,对权值进行长链剖分 ...
- bzoj3252: 攻略(贪心)
/* 因为权值都是正的, 所以贪心的正确性能保证 然后重链贪心跑一下就好了 */ #include<cstdio> #include<algorithm> #include&l ...
随机推荐
- 数据存储_SQLite (2)
SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 在ios项目中使用代码批量添加多行数据示例 代码示例: 1 // 2 // main.m 3 // 01-为数据库添加多行数据 4 ...
- 使用excel结合线性规划求解Holt-Winters参数
其实上面这个是Holt-Winters无季节趋势模型, 上面的S(t)对应下面的a(t)——截距(平滑值) b(t)仍然对应b(t)——趋势,T对应k. ...
- Silicon C8051F340之GPIO口配置与使用
一.背景: 很久前用过C8051,现在有相关需求需要重新使用C8051,然后发现一年前开发的相关经验都忘得 基本上差不多了.连最基本的GPIO口配置还得重新来看手册,所以有此文,做个记录,以备下次快速 ...
- PHP用curl伪造IP和来源
以前没有这么搞过. 今天群里一个朋友在问这个问题. 查了下,CURL确实很强悍的可以伪造IP和来源. 1.php 请求 2.php . 1.php代码: $ch = curl_init(); curl ...
- Java 串口通信
在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...
- CDN的特点
CDN的特点 1.本地Cache加速提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性(省钱,用户体验提升). 2.镜像服务消除了不同运营商之间的瓶颈造成的影响 ...
- iOS开发——高级篇——图片轮播及其无限循环效果
平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...
- 分享一些前端开发中最常用的JS代码片段~ 干货~
http://www.w3cfuns.com/notes/25068/1d0d350a974d879e63f1115cf80a3288.html
- JS中的 new 操作符简单理解
首先上一一个简单的 new 操作符实例 var Person = function(name){ this.name = name; this.say = function(){ return &qu ...
- SpringMVC中遇到的Http400 Bad Request 总结
在搭建SpringMVC环境,在使用中遇到了多次Bad Request的连接,下面来总结下. 1.参数类型不对,如后台实体类的属性为int,但传来的参数为字符串 2.因为我的粗心,本来是要通过Ajax ...