BZOJ3252: 攻略
BZOJ3252: 攻略
Description
Input
Output
Sample Input
4 3 2 1 1
1 2
1 5
2 3
2 4
Sample Output
题解Here!
#include<iostream>
#include<algorithm>
#include<cstdio>
#define LSON rt<<1
#define RSON rt<<1|1
#define DATA(x) b[x].data
#define POS(x) b[x].pos
#define SIGN(x) b[x].c
#define LSIDE(x) b[x].l
#define RSIDE(x) b[x].r
#define WIDTH(x) (RSIDE(x)-LSIDE(x)+1)
#define MAXN 200010
using namespace std;
int n,m,c=1,d=1;
int val[MAXN],head[MAXN],deep[MAXN],son[MAXN],size[MAXN],fa[MAXN],id[MAXN],pos[MAXN],top[MAXN];
long long sum[MAXN];
bool used[MAXN];
struct Tree{int next,to;
}a[MAXN<<1];
struct Segment_Tree{long long data,pos,c;int l,r;
}b[MAXN<<2];
inline int read(){int date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
inline void add(int x,int y){a[c].to=y;a[c].next=head[x];head[x]=c++;a[c].to=x;a[c].next=head[y];head[y]=c++;
}
void dfs1(int rt){son[rt]=0;size[rt]=1;for(int i=head[rt];i;i=a[i].next){int will=a[i].to;if(!deep[will]){deep[will]=deep[rt]+1;sum[will]=sum[rt]+val[will];fa[will]=rt;dfs1(will);size[rt]+=size[will];if(size[son[rt]]<size[will])son[rt]=will;}}
}
void dfs2(int rt,int f){id[rt]=d++;pos[id[rt]]=rt;top[rt]=f;if(son[rt])dfs2(son[rt],f);for(int i=head[rt];i;i=a[i].next){int will=a[i].to;if(will!=fa[rt]&&will!=son[rt])dfs2(will,will);}
}
inline void pushup(int rt){DATA(rt)=max(DATA(LSON),DATA(RSON));if(DATA(LSON)>DATA(RSON))POS(rt)=POS(LSON);else POS(rt)=POS(RSON);
}
inline void pushdown(int rt){if(!SIGN(rt)||LSIDE(rt)==RSIDE(rt))return;SIGN(LSON)+=SIGN(rt);DATA(LSON)+=SIGN(rt);SIGN(RSON)+=SIGN(rt);DATA(RSON)+=SIGN(rt);SIGN(rt)=0;
}
void buildtree(int l,int r,int rt){LSIDE(rt)=l;RSIDE(rt)=r;SIGN(rt)=0;if(l==r){DATA(rt)=sum[pos[l]];POS(rt)=l;return;}int mid=l+r>>1;buildtree(l,mid,LSON);buildtree(mid+1,r,RSON);pushup(rt);
}
void update(int l,int r,long long c,int rt){if(l<=LSIDE(rt)&&RSIDE(rt)<=r){SIGN(rt)+=c;DATA(rt)+=c;return;}pushdown(rt);int mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)update(l,r,c,LSON);if(mid<r)update(l,r,c,RSON);pushup(rt);
}
long long query(int l,int r,int rt){long long ans=0;if(l<=LSIDE(rt)&&RSIDE(rt)<=r)return DATA(rt);pushdown(rt);int mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)ans=max(ans,query(l,r,LSON));if(mid<r)ans=max(ans,query(l,r,RSON));return ans;
}
void work(){long long ans=0;for(int i=1;i<=m;i++){ans+=query(1,n,1);int x=pos[POS(1)];while(x&&used[x]){update(id[x],id[x]+size[x]-1,-val[x],1);used[x]=false;x=fa[x];}}printf("%lld\n",ans);
}
void init(){int x,y;n=read();m=read();for(int i=1;i<=n;i++){val[i]=read();used[i]=true;}for(int i=1;i<n;i++){x=read();y=read();add(x,y);}deep[1]=1;sum[1]=val[1];dfs1(1);dfs2(1,1);buildtree(1,n,1);
}
int main(){init();work();return 0;
}
转载于:https://www.cnblogs.com/Yangrui-Blog/p/9503305.html
BZOJ3252: 攻略相关推荐
- bzoj3252 攻略
http://www.elijahqi.win/2018/03/15/bzoj3252/ Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他 ...
- bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...
- BZOJ3252攻略——长链剖分+贪心
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...
- [bzoj3252]攻略
题目描述 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景(scene),某些场景可以通过不同的选择支到达 ...
- bzoj3252 攻略 dfs序+线段树
题目传送门 题目大意:给出一棵树,1为根节点,每个节点都有权值,每个叶子节点都是一个游戏的结局,选择k个游戏结局,使得权值总和最大,同一个节点不会被重复计算. 思路:这道题最关键的是要想到一个性质,就 ...
- bzoj3252攻略 贪心+dfs序+线段树
题目链接:戳这里 3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 605 Solved: 255 [Submit][Status] ...
- bzoj3252攻略(线段树+dfs序)
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 562 Solved: 238 [Submit][Status][Discuss] ...
- dfs序+线段树 BZOJ3252 攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 496 Solved: 211 [Submit][Status][Discuss] ...
- BZOJ3252 攻略
标签:贪心,dfs Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这 ...
最新文章
- C++实现digkstra最短路径算法(附完整源码)
- 磊哥工作十几年了,竟没有用过do-while!(文末送书)
- linux ipset 流量,linux中ipset命令的使用方法详解
- ios开发入门资料整理
- 【一本通1347】格子游戏
- ArcGIS(A column was specified that does not exist)
- swift 字符串转int_Swift Tips Streamline 如何假装写过 Swift
- 灵修---士师记第9章
- 稀疏矩阵-sparse 存储和转换
- oracle左裁剪原理,ORACLE 各种PARTITION 的分析(原)
- ps里文字变形、、、
- 也许黎曼猜想是错误的
- 网易易盾首席产品风控官imlolo分享对社交业务安全风控的认知和思考
- 2.14 Whisper和Swarm
- JS中如何删除li节点
- 我本沉默不显示服务器列表,独家发布辉煌沉默全新我本沉默2003服务端
- 开始CentOS世界 从yum搭建lnmp环境开始,root的密码破解,定时任务, 后续其他功能 redHat5.4
- crx2rnx格式转换
- halcon提取区域的拐点、折点
- android textview 用html设置字体
热门文章
- 【mycat】mycat安装
- 控制和机器学习书籍推荐
- 样本协差阵 matlab函数,方差var、协方差cov、协方差矩阵(浅谈)(三)_函数cov...
- 常见的思科10G光模块参数及板卡支持的光模块类型
- 新员工入职培训系列之团队介绍提纲
- maya导入abc动画_人物动画极速制作宝典分享!再也不用担心项目周期不够了
- 【动手学深度学习----注意力机制笔记】
- 解决EXCEL中选中单元格右键被屏蔽的问题
- 【Linux基础】常用开发工具——yum包管理工具
- 大功率电源36V 14A 500W 包含原理图PDF和PCB,及BOM 及变压器PFC电感设计