填坑= =第一道裸树剖

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector> using namespace std; const int Maxn=,Maxm=,INF=~0u>>; int n; struct Data{
int sum,max;
Data (int sum=,int max=-INF):sum(sum),max(max){}
Data operator + (const Data& rhs)const{
return Data(sum+rhs.sum,std::max(max,rhs.max));
}
}; struct SegmentTree{
Data da[Maxn*];
int lft,rgt,w;
void pp(int l,int r=){
lft=l;rgt=r;
}
void change(int s,int l,int r){
if(l==r && l==lft){
da[s]=Data(w,w);
return;
}
int mid=(l+r)>>;
if(lft<=mid) change(s<<,l,mid);
else change(s<<|,mid+,r);
da[s]=da[s<<]+da[s<<|];
}
Data query(int s,int l,int r){
if(lft<=l && r<=rgt) return da[s];
int mid=(l+r)>>;
if(rgt<=mid) return query(s<<,l,mid);
if(mid<lft) return query(s<<|,mid+,r);
return query(s<<,l,mid) + query(s<<|,mid+,r);
}
}seg; int en[Maxm*],next[Maxm*],fir[Maxn],tot; void Add(int from,int to){
en[++tot] = to;
next[tot] = fir[from];
fir[from] = tot;
} int sz[Maxn],fa[Maxn],son[Maxn],dep[Maxn]; void dfs(int u){
sz[u]=;
son[u]=;
for(int k=fir[u];k;k=next[k]){
int v=en[k];
if(v == fa[u]) continue;
fa[v] = u;
dep[v]=dep[u]+;
dfs(v);
sz[u]+=sz[v];
if(sz[v]>sz[son[u]]) son[u] = v;
}
} int pos[Maxn],top[Maxn],tm; void build(int u,int pre){
top[u]=pre;
pos[u]=++tm;
if(son[u]) build(son[u],pre);
for(int k=fir[u];k;k=next[k]){
int v=en[k];
if(v==fa[u] || v==son[u]) continue;
build(v,v);
}
} Data query(int a,int b){
int ta=top[a],tb=top[b];
Data ret;
for(;ta!=tb;a=fa[ta],ta=top[a]){
if(dep[ta]<dep[tb]) swap(a,b), swap(ta,tb);
seg.pp(pos[ta],pos[a]);
ret=ret+seg.query(,,n);
}
if(dep[a]>dep[b]) swap(a,b);
seg.pp(pos[a],pos[b]);
return ret+seg.query(,,n);
} int main(){
#ifdef DEBUG
freopen("in.txt","r",stdin);
freopen("my.out","w",stdout);
#endif scanf("%d",&n);
for(int i=;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
Add(u,v);
Add(v,u);
} dfs();
build(,); for(int i=;i<=n;i++){
seg.pp(pos[i]);
scanf("%d",&seg.w);
seg.change(,,n);
} int m;
scanf("%d",&m);
char cmd[];
int a,b; for(;m--;){
scanf("%s%d%d",cmd,&a,&b);
if(cmd[]=='C') seg.lft=pos[a],seg.w=b,seg.change(,,n);
else if(cmd[]=='S') printf("%d\n",query(a,b).sum);
else printf("%d\n",query(a,b).max);
} return ;
}

bzoj1036 zjoi2008 树的统计 count的更多相关文章

  1. [BZOJ1036][ZJOI2008]树的统计Count 解题报告|树链剖分

    树链剖分 简单来说就是数据结构在树上的应用.常用的为线段树splay等.(可现在splay还不会敲囧) 重链剖分: 将树上的边分成轻链和重链. 重边为每个节点到它子树最大的儿子的边,其余为轻边. 设( ...

  2. bzoj1036 [ZJOI2008]树的统计Count

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 12646  Solved: 5085 [Subm ...

  3. bzoj1036 [ZJOI2008]树的统计Count 树链剖分模板题

    [ZJOI2008]树的统计Count Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u ...

  4. bzoj千题计划124:bzoj1036: [ZJOI2008]树的统计Count

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 树链剖分板子题 #include<cstdio> #include<iost ...

  5. BZOJ1036 [ZJOI2008]树的统计Count 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1036 题意概括 一个树,每个节点有一个权值.3种操作. 1:修改某一个节点的权值. 2:询问某两个 ...

  6. 【lct】bzoj1036 [ZJOI2008]树的统计Count

    题意:给你一棵树,点带权,支持三种操作:单点修改:询问链上和:询问链上max. 这里的Query操作用了与上一题不太一样的做法(上一题用那种做法,因为在边带权的情况下换根太困难啦): 先ChangeR ...

  7. BZOJ1036[ZJOI2008]树的统计Count 题解

    题目大意: 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.有一些操作:1.把结点u的权值改为t:2.询问从点u到点v的路径上的节点的最大权值 3.询问从点u到点v的路径上的节点的权值和 ...

  8. [BZOJ1036] [ZJOI2008] 树的统计Count (LCT)

    Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. Q ...

  9. bzoj1036 [ZJOI2008]树的统计Count(树链剖分)

    Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. Q ...

随机推荐

  1. 关于SQL配置管理器的服务无法启动的解决办法!

    由于各种问题的因素,导致SQL服务无法启动,然后去事件查看器里看了下,有两个关于SQL 的错误.分别是实例中master.mdf和master.ldf的文件系统拒绝访问! 为了赶作业,带着焦急的心情去 ...

  2. ASP.NET网站实现中英文转换(本地化资源)

    主要内容: 1. 简单例子 2. 进一步认识Localization 3. 语言转换 4. 解决方案 一. 简单例子 下面通过一个简单的例子来说明利用Localization来实现本地化是那么的简单, ...

  3. SpringMVC4+thymeleaf3的一个简单实例(篇一:基本环境)

    首语:用SpringMVC和thymeleaf实现一个简单的应用,包括基本环境搭建,SpringMVC4和thymeleaf3的整合,页面参数的获取,页面参数验证,以及用MySQL保存数据.我会把步骤 ...

  4. java设计模式——单例(Singleton)模式

    在某些场景,你需要找到一个承担职责的对象,并且这个对象是他所属类的唯一实例.此时可以使用单例模式. 单例模式的意图是为了确保一个类有且仅有一个实例,并为他提供一个全局的访问点.创建一个担当独一无二角色 ...

  5. windows core audio apis

    这个播放流程有一次当初不是很理解,做个记录,代码中的中文部分,原文档是有解释的:To move a stream of rendering data through the endpoint buff ...

  6. phpcms V9 数据模型基类(转)

    转自:http://www.cnblogs.com/Braveliu/p/5100421.html 在学习<phpcms V9首页模板文件解析>的第七步,我们看到content_model ...

  7. C#快速导入海量XML数据至SQL Server数据库

    #region 将Xml中的数据读到Dataset中,然后用SqlBulkCopy类把数据copy到目的表中using (XmlTextReader xmlReader = new XmlTextRe ...

  8. Visual Studio 2013 在使用 MVC5 无智能提示

    关于 Visual Studio 2013 在使用 MVC5 无智能提示的问题,类库无法正常识别,连最基本的关键字提示都没有了,类变色也没有了,所有的关键字代码,类名,方法成员名都要全部手动敲 原因: ...

  9. 搜索所有的路径-矩阵运算-暴力-ACM

    给定一个n*n整数矩阵,定义对I行的SHIFT操作( 0 <= i < n ),是将第I行所有元素都右移一位,最右边的移到最左边. 你可以对任意行进行任意次SHIFT操作,使得: max0 ...

  10. ubuntu install opengrok

    总结: 1. 安装jdk和tomcat 2. 安装ctags 3. 解压opengrok.tar.gz包, 然后将source.war复制到tomcat/webapp下面 sudo cp -R ope ...