BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序
Description
Input
Output
Sample Input
4 3 2 1 1
1 2
1 5
2 3
2 4
Sample Output
#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序相关推荐
- bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...
- bzoj3252攻略(线段树+dfs序)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 562 Solved: 238 [Submit][Status][Discuss] ...
- BSOJ4851:攻略 贪心+线段树
4851 -- [模拟试题]攻略 Description 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景 ...
- HDU5692(线段树+dfs序)
Snacks Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)
题目链接:点击查看 题目大意:给出一棵无向树,每个节点都有一种颜色,接下来时m次操作: 1 x y:将x及其子树染成y的颜色 2 x:查询x及其子树上共有多少种不同的颜色 题目分析:看完这个题的第一反 ...
- HDU - 3974 Assign the task (线段树 + dfs序)
HDU - 3974 题意:有个公司有一些关系,每个人(除了boss)都有且仅有一个上司,这就是一棵树的关系,然后会有一些操作,C i,询问第i个人现在的任务,T x y,把y任务给x, 给x相当于给 ...
- 苹果树(线段树+Dfs序)
1228 苹果树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在卡卡的房子外面,有一棵苹果树.每年的春天,树上总会结 ...
- 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 ...
- Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
题目地址 题意:给你一棵树,1为根节点,每个节点都有应该状态0或者1,你有两种操作,pow的操作是把该节点以及他的所有子树的每个节点进行自身异或的操作,get就是查询该节点以及他的所有子树的每个节点有 ...
最新文章
- 电影中成千上万的群众演员是怎么来的?
- 地址突然就不对了_【装维大课堂】光猫的无线WiFi功能突然无法使用
- 常用SQL Server 小语法、函数 等的实例汇总
- 最优化——对偶问题的性质(弱对偶性,强对偶性),对偶问题形式的书写(对偶规则)
- 如何从Angular的ActivatedRoute数据结构中获得运行时路由信息
- python删除列表元素_追求简单C++之删除STL列表的元素
- Subversion(SVN)/TortoiseSVN 的分支合并方法
- 【渝粤题库】陕西师范大学800004 遥感概论
- 【OS学习笔记】二十二 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之用户程序
- Zookeeper 的 5 大核心知识点!
- php分类程序,php 无限分类程序
- 1020. 月饼 (25)-PAT乙级真题
- c语言ip判断程序,IP判断 (C语言代码)
- 虚拟vpc服务器搭建,服务器搭建vpc
- Excel求和公式的几种用法
- 你真的了解C语言 if - else 、bool(布尔值)、浮点数损失吗 ?
- 【攻防世界-Web简单篇】
- 空调房早餐三杯水 让你轻松获得七大类营养
- 理解javaScript的数据类型之字符串类型
- TiDB 在金融行业关键业务场景的实践(下篇)
热门文章
- 记我参加过的竞赛——“飞思卡尔杯”全国大学生智能汽车竞赛
- 【调剂】3.20计算机考研其余调剂信息
- webAPP学习设计:页面模式的设计。
- 解决方法:Win11下解决kali在vmware移动鼠标,鼠标在虚拟机和真实机来回切换的方法
- RPA自动办公02——Uibot界面元素选择
- FLOW.SCIENCE.FLOW-3D.V11.0.4.WIN64
- 转植物大战僵尸 基址
- 这篇文章把 TCP/IP 讲绝了!
- Shib+Presto 即席查询
- gentry同态加密算法_全同态加密算法