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

题解
dfs序+线段树。
每次贪心地取叶子结点到根路径和最大的。然后利用dfs序+线段树修改。
(数组开小wa了好几遍。。)
代码

#include<bits/stdc++.h>
#define ll long long
#define N 200005
using namespace std;
inline int read()
{int x=0,f=1;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;
}
int tot,tim,n,k;
ll ans,lazy[4*N],mx[N],val[N];
int ret[2*N],Next[2*N],Head[N],fa[N];
int l[N],r[N],a[N],p[N];
struct node{ll mx,id;}t[4*N];
bool flag[N];
inline void ins(int u,int v)
{ret[++tot]=v;Next[tot]=Head[u];Head[u]=tot;
}
void dfs(int u)
{l[u]=++tim;mx[tim]=val[u];p[tim]=u;for (int i=Head[u];i;i=Next[i]){int v=ret[i];if (v!=fa[u]){fa[v]=u;val[v]+=val[u];dfs(v);}}r[u]=tim;
}
bool operator<(node a,node b)
{return a.mx<b.mx;
}
inline void update(int k)
{t[k]=max(t[k<<1],t[k<<1|1]);
}
inline void pushdown(int k,int l,int r)
{if (l==r) return;t[k<<1].mx+=lazy[k];t[k<<1|1].mx+=lazy[k];lazy[k<<1]+=lazy[k];lazy[k<<1|1]+=lazy[k]; lazy[k]=0;
}
void build(int k,int l,int r)
{if (l==r){t[k].mx=mx[l];t[k].id=p[l];return;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);update(k);
}
void modify(int k,int l,int r,int x,int y,int z)
{//cout<<k<<" "<<l<<" "<<r<<" "<<x<<" "<<y<<endl;if (lazy[k]) pushdown(k,l,r);if (l==x&&r==y){lazy[k]+=z;t[k].mx+=z;return;}int mid=(l+r)>>1;if (y<=mid) modify(k<<1,l,mid,x,y,z);else if (x>mid) modify(k<<1|1,mid+1,r,x,y,z);else modify(k<<1,l,mid,x,mid,z),modify(k<<1|1,mid+1,r,mid+1,y,z);update(k);
}
void del(int u)
{if (flag[u]) return;flag[u]=1;modify(1,1,n,l[u],r[u],-a[u]);del(fa[u]);
}
int main()
{n=read();k=read();for (int i=1;i<=n;i++) val[i]=a[i]=read();for (int i=1;i<n;i++){int u=read(),v=read();ins(u,v);ins(v,u);}dfs(1);build(1,1,n);flag[0]=1;for (int i=1;i<=k;i++){if (flag[t[1].id]) break;//cout<<t[1].mx<<" "<<t[1].id<<endl;ans+=t[1].mx;del(t[1].id);}printf("%lld",ans);return 0;
}

【bzoj3252】攻略相关推荐

  1. BZOJ3252: 攻略

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

  2. bzoj3252 攻略

    http://www.elijahqi.win/2018/03/15/bzoj3252/ ‎ Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他 ...

  3. bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)

    3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...

  4. BZOJ3252攻略——长链剖分+贪心

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

  5. [bzoj3252]攻略

    题目描述 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达 ...

  6. bzoj3252 攻略 dfs序+线段树

    题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...

  7. bzoj3252攻略 贪心+dfs序+线段树

    题目链接:戳这里 3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 605  Solved: 255 [Submit][Status] ...

  8. bzoj3252攻略(线段树+dfs序)

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 562  Solved: 238 [Submit][Status][Discuss] ...

  9. dfs序+线段树 BZOJ3252 攻略

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 496  Solved: 211 [Submit][Status][Discuss] ...

  10. BZOJ3252 攻略

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

最新文章

  1. Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常
  2. MySql -- 数据结构
  3. isp 图像算法(二)之dead pixel correction坏点矫正
  4. tomcat安全配置之禁用Directory Listing
  5. 小希的迷宫 HDU - 1272 (并查集)
  6. 场景数据的动态更新setDataVariance(osg::Object::DYNAMIC) (转)
  7. sap模块介绍_小迈说|SAP究竟有多少模块?
  8. Event Loop、计时器、nextTick
  9. SpringBoot精通系列-使用Mybatis Generator生成Dao层代码
  10. 苹果WWDC 2019日期曝光 iOS 13也即将到来!
  11. windows ad 域下配置L2TP ***服务器 企业防火墙端口配置
  12. PROE4.0抄数逆向点造型高级曲面建模教程
  13. NXP单片机开发环境搭建,开发包下载
  14. 软件工程导论——软件工程介绍
  15. ie浏览器的标准模式与怪异模式的设置与区分方法
  16. 别错过这张AI商用清单:你的生产难题可能被一个应用解决!
  17. Photoshop Elements 10 All-in-One For Dummies 免积分下载
  18. GNU Radio: 射频子板
  19. ipynb转换为python文件
  20. 汽车变速器(自动挡)英文缩写

热门文章

  1. 支付路由系统设计二:核心流程
  2. (一)GNURadio3.9 安装教程
  3. 乘风聚合图床源码 多接口
  4. android tools是干什么的,Android 冷兵器 之 tools
  5. 2019算法面经汇总
  6. Linux 命令(155)—— gunzip 命令
  7. C++项目:高并发内存池
  8. OpenCV第七篇:车牌识别
  9. 【MPC5744P】劳特巴赫调试器Trace32的使用方法
  10. 如何利用二极管把电路中的电压升上去?