HDU5692 Snacks DFS+线段树
分析:一棵以1为根的有根树,然后每个点维护从根到当前节点的路径和,当修改一个点时
只会影响的子树的和,最优值也是子树最大的值
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- typedef long long LL;
- const int N=1e5+;
- const LL INF=1ll*1e11;
- struct Edge{
- int v,next;
- }edge[N<<];
- int head[N],tot;
- void add(int u,int v){
- edge[tot].v=v;
- edge[tot].next=head[u];
- head[u]=tot++;
- }
- int s[N],t[N],clk,match[N],n,m,a[N];
- LL sum[N],c[N<<],lz[N<<];
- void dfs(int u,int f){
- s[u]=++clk;match[s[u]]=u;
- sum[u]+=sum[f];
- for(int i=head[u];~i;i=edge[i].next){
- int v=edge[i].v;
- if(v==f)continue;
- dfs(v,u);
- }
- t[u]=clk;
- }
- void up(int rt){
- c[rt]=max(c[rt<<],c[rt<<|]);
- }
- void down(int rt){
- if(lz[rt]){
- c[rt<<]+=lz[rt];
- c[rt<<|]+=lz[rt];
- lz[rt<<]+=lz[rt];
- lz[rt<<|]+=lz[rt];
- lz[rt]=;
- }
- }
- void build(int rt,int l,int r){
- lz[rt]=;
- if(l==r){c[rt]=sum[match[l]];return;}
- int m=(l+r)>>;
- build(rt<<,l,m);
- build(rt<<|,m+,r);
- up(rt);
- }
- int tmp;
- void modify(int rt,int l,int r,int x,int y){
- if(x<=l&&r<=y){
- lz[rt]+=1ll*tmp;
- c[rt]+=1ll*tmp;
- return;
- }
- int m=(l+r)>>;
- down(rt);
- if(x<=m)modify(rt<<,l,m,x,y);
- if(y>m)modify(rt<<|,m+,r,x,y);
- up(rt);
- }
- LL ask(int rt,int l,int r,int x,int y){
- if(x<=l&&r<=y)return c[rt];
- LL ans=-INF;
- int m=(l+r)>>;
- down(rt);
- if(x<=m)ans=max(ans,ask(rt<<,l,m,x,y));
- if(y>m)ans=max(ans,ask(rt<<|,m+,r,x,y));
- return ans;
- }
- int main()
- {
- int T,cas=;
- scanf("%d",&T);
- while(T--){
- printf("Case #%d:\n",++cas);
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;++i)head[i]=-;
- clk=tot=;
- for(int i=;i<n;++i){
- int u,v;
- scanf("%d%d",&u,&v);
- ++u,++v;
- add(u,v),add(v,u);
- }
- for(int i=;i<=n;++i)
- scanf("%I64d",&sum[i]),a[i]=(int)sum[i];
- dfs(,);
- build(,,n);
- for(int i=;i<m;++i){
- int op,x,y;
- scanf("%d%d",&op,&x);
- ++x;
- if(!op){
- scanf("%d",&y);
- tmp=y-a[x];
- a[x]=y;
- if(tmp)modify(,,n,s[x],t[x]);
- }
- else{
- printf("%I64d\n",ask(,,n,s[x],t[x]));
- }
- }
- }
- return ;
- }
HDU5692 Snacks DFS+线段树的更多相关文章
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- Codeforces1110F Nearest Leaf dfs + 线段树 + 询问离线
Codeforces1110F dfs + 线段树 + 询问离线 F. Nearest Leaf Description: Let's define the Eulerian traversal of ...
- dfs+线段树 zhrt的数据结构课
zhrt的数据结构课 这个题目我觉得是一个有一点点思维的dfs+线段树 虽然说看起来可以用树链剖分写,但是这个题目时间卡了树剖 因为之前用树剖一直在写这个,所以一直想的是区间更新,想dfs+线段树,有 ...
- HDU5692 Snacks DFS序 线段树
去博客园看该题解 题目 HDU5692 Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的 ...
- hdu-5692 Snacks(dfs序+线段树)
题目链接: Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的 ...
- hdu 5692(dfs+线段树) Snacks
题目http://acm.hdu.edu.cn/showproblem.php?pid=5692 题目说每个点至多经过一次,那么就是只能一条路线走到底的意思,看到这题的格式, 多个询问多个更新, 自然 ...
- 【Codeforces-707D】Persistent Bookcase DFS + 线段树
D. Persistent Bookcase Recently in school Alina has learned what are the persistent data structures: ...
- Educational Codeforces Round 6 E. New Year Tree dfs+线段树
题目链接:http://codeforces.com/contest/620/problem/E E. New Year Tree time limit per test 3 seconds memo ...
- 2014 Super Training #9 F A Simple Tree Problem --DFS+线段树
原题: ZOJ 3686 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3686 这题本来是一个比较水的线段树,结果一个ma ...
随机推荐
- swift基础--数组、字典
(1)初始化 (2)新增.修改.删除 (3)清空 (4)遍历 var array1 = ["x","y","z"] var array2:[ ...
- c++ 异常处理 assert | try
#include <iostream> #include <cassert> using namespace std; int main() { ; assert(i == ) ...
- AForm
相信大部分程序员都接触过表单,表单是收集用户输入的不二之选,但是表单的开发又是最繁琐.最复杂的,简单地说,开发表单你需要涉及到很多知识: 布局,表单如何布局排版,看起来最清晰整洁,且符合用户体验 控件 ...
- The 5th Zhejiang Provincial Collegiate Programming Contest---ProblemE:Easy Task
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2969 全场第一水题.我不知道怎么解释,看代码就好了... #include ...
- spoj 416
又臭又长的烂代码 ...... #include <iostream> #include <cstdio> #include <cstring> #include ...
- Akka Stream文档翻译:Quick Start Guide: Reactive Tweets
Quick Start Guide: Reactive Tweets 快速入门指南: Reactive Tweets (reactive tweets 大概可以理解为“响应式推文”,在此可以测试下GF ...
- Unity寻路的功能总结
源地址:http://blog.csdn.net/sgnyyy/article/details/21878163 1. 利用Unity本身自带的NavMesh 这篇文章已经比较详细,可能对于很多需要a ...
- zoj 3329 One Person Game 概率DP
思路:这题的递推方程有点麻烦!! dp[i]表示分数为i的期望步数,p[k]表示得分为k的概率,p0表示回到0的概率: dp[i]=Σ(p[k]*dp[i+k])+dp[0]*p0+1 设dp[i]= ...
- linux samba.tar.gz安装和配置
安装步骤: 1. tar -xzvf samba-3.5.10.tar.gz2. cd samba-3.5.103. cd source34. ./autogen.sh 如果出现:./autogen ...
- Amzon MWS API开发之订单接口
Amazon订单接口是Amazon MWS 开发接口中的一大块,我们可以通过接口调用来获得订单数据. 在调用接口之前,首先我们要获得相关店铺商家的店铺密钥等信息.如下: 在此我将所有信息定义在一个类中 ...