BZOJ_3252_攻略_线段树+dfs序

Description

题目简述:树版[k取方格数]
众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏。今天他得到了一款新游戏《XX
半岛》,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达其他场景。所有场景和选择支构成树状
结构:开始游戏时在根节点(共通线),叶子节点为结局。每个场景有一个价值,现在桂马开启攻略之神模式,同
时攻略k次该游戏,问他观赏到的场景的价值和最大是多少(同一场景观看多次是不能重复得到价值的)
“为什么你还没玩就知道每个场景的价值呢?”
“我已经看到结局了。”

Input

第一行两个正整数n,k
第二行n个正整数,表示每个场景的价值
以下n-1行,每行2个整数a,b,表示a场景有个选择支通向b场景(即a是b的父亲)
保证场景1为根节点
n<=200000,1<=场景价值<=2^31-1

Output

输出一个整数表示答案

Sample Input

5 2
4 3 2 1 1
1 2
1 5
2 3
2 4

Sample Output

10

k取方格数有一个经典的网络流做法。
由于网络流是基于贪心来找最长的一条路来增广的的,所以放到树上就转化为了k次查询根到叶子路径点权和最大的叶子编号。
然后把路径上点的贡献减去。
由于每个点最多删一次,可以每次暴力向上走,一次修改一条链的贡献。
可以把叶子的dfs序搞出来,每次修改就对应一段区间修改。
线段树维护区间最值即可。
 
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050
#define ls p<<1
#define rs p<<1|1
typedef long long ll;
int mx[N<<2];
ll t[N<<2],inc[N<<2],ans;
int head[N],to[N<<1],nxt[N<<1],val[N],cnt,kill[N],dfn[N],son[N],k,tot,fa[N],turn[N],n;
ll dis[N],dd[N];
inline void add(int u,int v) {to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;
}
void dfs(int x,int y) {dis[x]=dis[y]+val[x];int i,flg=0; fa[x]=y;dfn[x]=tot+1;for(i=head[x];i;i=nxt[i]) {if(to[i]!=y) flg=1;}if(!flg) {dfn[x]=son[x]=++tot;turn[tot]=x;return ;}dfn[x]=tot+1;for(i=head[x];i;i=nxt[i]) {if(to[i]!=y) {dfs(to[i],x);}}son[x]=tot;
}
void pushup(int p) {if(t[ls]>t[rs]) mx[p]=mx[ls],t[p]=t[ls];else mx[p]=mx[rs],t[p]=t[rs];
}
void build(int l,int r,int p) {if(l==r) {mx[p]=turn[l];t[p]=dis[turn[l]];return ;}int mid=(l+r)>>1;build(l,mid,ls); build(mid+1,r,rs);pushup(p);
}
void pushdown(int p) {ll d=inc[p];if(d) {t[ls]+=d; t[rs]+=d;inc[ls]+=d; inc[rs]+=d;inc[p]=0;}
}
void update(int l,int r,int x,int y,int v,int p) {if(x<=l&y>=r) {t[p]+=v; inc[p]+=v; return ;}pushdown(p);int mid=(l+r)>>1;if(x<=mid) update(l,mid,x,y,v,ls);if(y>mid) update(mid+1,r,x,y,v,rs);pushup(p);
}
void solve(int x) {if(kill[x]||!x) return ;kill[x]=1;update(1,tot,dfn[x],son[x],-val[x],1);solve(fa[x]);
}
int main() {scanf("%d%d",&n,&k);int i,x,y;for(i=1;i<=n;i++) {scanf("%d",&val[i]);}for(i=1;i<n;i++) {scanf("%d%d",&x,&y);add(x,y); add(y,x);}dfs(1,0);build(1,tot,1);for(i=1;i<=k;i++) {ans+=t[1];solve(mx[1]);}printf("%lld\n",ans);
}

转载于:https://www.cnblogs.com/suika/p/8998012.html

BZOJ_3252_攻略_线段树+dfs序相关推荐

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

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

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

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

  3. BSOJ4851:攻略 贪心+线段树

    4851 -- [模拟试题]攻略 Description 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景 ...

  4. HDU5692(线段树+dfs序)

    Snacks Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  5. CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)

    题目链接:点击查看 题目大意:给出一棵无向树,每个节点都有一种颜色,接下来时m次操作: 1 x y:将x及其子树染成y的颜色 2 x:查询x及其子树上共有多少种不同的颜色 题目分析:看完这个题的第一反 ...

  6. HDU - 3974 Assign the task (线段树 + dfs序)

    HDU - 3974 题意:有个公司有一些关系,每个人(除了boss)都有且仅有一个上司,这就是一棵树的关系,然后会有一些操作,C i,询问第i个人现在的任务,T x y,把y任务给x, 给x相当于给 ...

  7. 苹果树(线段树+Dfs序)

    1228 苹果树  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 在卡卡的房子外面,有一棵苹果树.每年的春天,树上总会结 ...

  8. Change FZU - 2277(线段树+dfs序)

    There is a rooted tree with n nodes, number from 1-n. Root's number is 1.Each node has a value ai. I ...

  9. Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)

    题目地址 题意:给你一棵树,1为根节点,每个节点都有应该状态0或者1,你有两种操作,pow的操作是把该节点以及他的所有子树的每个节点进行自身异或的操作,get就是查询该节点以及他的所有子树的每个节点有 ...

最新文章

  1. 电影中成千上万的群众演员是怎么来的?
  2. 地址突然就不对了_【装维大课堂】光猫的无线WiFi功能突然无法使用
  3. 常用SQL Server 小语法、函数 等的实例汇总
  4. 最优化——对偶问题的性质(弱对偶性,强对偶性),对偶问题形式的书写(对偶规则)
  5. 如何从Angular的ActivatedRoute数据结构中获得运行时路由信息
  6. python删除列表元素_追求简单C++之删除STL列表的元素
  7. Subversion(SVN)/TortoiseSVN 的分支合并方法
  8. 【渝粤题库】陕西师范大学800004 遥感概论
  9. 【OS学习笔记】二十二 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之用户程序
  10. Zookeeper 的 5 大核心知识点!
  11. php分类程序,php 无限分类程序
  12. 1020. 月饼 (25)-PAT乙级真题
  13. c语言ip判断程序,IP判断 (C语言代码)
  14. 虚拟vpc服务器搭建,服务器搭建vpc
  15. Excel求和公式的几种用法
  16. 你真的了解C语言 if - else 、bool(布尔值)、浮点数损失吗 ?
  17. 【攻防世界-Web简单篇】
  18. 空调房早餐三杯水 让你轻松获得七大类营养
  19. 理解javaScript的数据类型之字符串类型
  20. TiDB 在金融行业关键业务场景的实践(下篇)

热门文章

  1. 记我参加过的竞赛——“飞思卡尔杯”全国大学生智能汽车竞赛
  2. 【调剂】3.20计算机考研其余调剂信息
  3. webAPP学习设计:页面模式的设计。
  4. 解决方法:Win11下解决kali在vmware移动鼠标,鼠标在虚拟机和真实机来回切换的方法
  5. RPA自动办公02——Uibot界面元素选择
  6. FLOW.SCIENCE.FLOW-3D.V11.0.4.WIN64
  7. 转植物大战僵尸 基址
  8. 这篇文章把 TCP/IP 讲绝了!
  9. Shib+Presto 即席查询
  10. gentry同态加密算法_全同态加密算法