错在单点修改时传的是a,应该是id[a](Line 89)。谨记!!!

//fushao zuishuai
#include <cstdio>
#include <cstring>
#include <iostream>
#define ll(x) (x<<1)
#define rr(x) (x<<1|1)
using namespace std; const int N=;
int w[N],a[N],maxx[N*],sum[N*];
int n,m,s[N*][],o[N],top[N],son[N],id[N],cnt,siz[N],d[N],f[N],dfn; void jia(int a,int b) {s[++cnt][]=b;s[cnt][]=o[a];o[a]=cnt;return;} void shang(int r) {maxx[r]=max(maxx[ll(r)],maxx[rr(r)]);sum[r]=sum[ll(r)]+sum[rr(r)];} void js(int r,int z,int y)
{
if (z==y) {sum[r]=a[z];maxx[r]=a[z];return;}
int k=z+y>>;js(ll(r),z,k);js(rr(r),k+,y);shang(r);
} void ddxg(int r,int z,int y,int g,int v)
{
if (z>g||y<g) return;
if (z>=g&&y<=g) {sum[r]=v;maxx[r]=v;return;}int k=z+y>>;
ddxg(ll(r),z,k,g,v);ddxg(rr(r),k+,y,g,v);shang(r);
} int cx1(int r,int z,int y,int zz,int yy)
{
if (z>yy||y<zz) return ;if (z>=zz&&y<=yy) return sum[r];
int k=z+y>>;return cx1(ll(r),z,k,zz,yy)+cx1(rr(r),k+,y,zz,yy);
} int cx2(int r,int z,int y,int zz,int yy)
{
if (z>yy||y<zz) return -;if (z>=zz&&y<=yy) return maxx[r];
int k=z+y>>;return max(cx2(ll(r),z,k,zz,yy),cx2(rr(r),k+,y,zz,yy));
} void dfs1(int x,int fa,int dep)
{
f[x]=fa;d[x]=dep;siz[x]=;
for (int i=o[x];i;i=s[i][])
if (s[i][]!=fa) {
dfs1(s[i][],x,dep+);siz[x]+=siz[s[i][]];
if (siz[s[i][]]>siz[son[x]]) son[x]=s[i][];
}
} void dfs2(int x,int tp)
{
id[x]=++dfn;top[x]=tp;a[dfn]=w[x];
if (son[x]) dfs2(son[x],tp);
for (int i=o[x];i;i=s[i][])
if (s[i][]!=f[x]&&son[x]!=s[i][]) dfs2(s[i][],s[i][]);
} int qiulu2(int a,int b)
{
int ans=-3e8;
while (top[a]!=top[b]) {
if (d[top[a]]<d[top[b]]) swap(a,b);
ans=max(ans,cx2(,,n,id[top[a]],id[a]));a=f[top[a]];
}
if (d[a]>d[b]) swap(a,b);ans=max(ans,cx2(,,n,id[a],id[b]));
return ans;
} int qiulu1(int a,int b)
{
int ans=;
while (top[a]!=top[b]) {
if (d[top[a]]<d[top[b]]) swap(a,b);
ans+=cx1(,,n,id[top[a]],id[a]);a=f[top[a]];
}
if (d[a]>d[b]) swap(a,b);ans+=cx1(,,n,id[a],id[b]);
return ans;
} int main()
{
cin>>n;int a,b,t=n-;while (t--) {scanf("%d%d",&a,&b);jia(a,b);jia(b,a);}
for (int i=;i<=n;i++) scanf("%d",&w[i]);dfs1(,,);dfs2(,);js(,,n);
cin>>m;char q[];
while (m--) {
scanf("%s",q);
if (q[]=='H') {scanf("%d%d",&a,&b);ddxg(,,n,id[a],b);}
if (q[]=='M') {scanf("%d%d",&a,&b);printf("%d\n",qiulu2(a,b));}
if (q[]=='S') {scanf("%d%d",&a,&b);printf("%d\n",qiulu1(a,b));}
}
return ;
}

让lu哥头痛了许久的代码(洛谷:树的统计)的更多相关文章

  1. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  2. 期待许久的事情终于发生-微软收购Xamarin

    刚在VS推送的新闻中看到了醒目的标题:Microsoft to acquire Xamarin and empower more developers to build apps on any dev ...

  3. 【阔别许久的博】【我要开始攻数学和几何啦】【高精度取模+同余模定理,*】POJ 2365 The Embarrassed Cryptographer

    题意:给出一大数K(4 <= K <= 10^100)与一整数L(2 <= L <= 106),K为两个素数的乘积(The cryptographic keys are cre ...

  4. 获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)

    刚开始到现在公司的时候接到一个任务:开发一个activex控件,自动操作本地exe程序,当时遇到弹出菜单无法获取的问题,还好不影响,最近又遇到这个问题,绕不过去了,于是昨天花了一个上午百度了个遍,总算 ...

  5. docker 网络模式研究了许久,其实我们需要的是docker run -p 80:80命令

    我们只是希望能够从外部访问到docker而已,并不需要去折腾该死的网络模式,桥接,host等等. -p: 端口映射,格式为:主机(宿主)端口:容器端口 sudo docker run -t -i  - ...

  6. 被我忽略许久的set

    心塞,set一直是我忽略的一个数据结构 1.生成一个set: 1) set(iterable) 传入一个可以迭代的数据结构: eg:字符串;元组;列表,字典 2) {v1,v2,.......,vn} ...

  7. 关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑

    ---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时间板子就死机了. 使用自己的就不会死机, ...

  8. 洛谷 P4838 P哥破解密码 题解

    矩阵乘法 + 快速幂优化递推: 看到这个题目我们不难想到递推,题干中说3个连续的A出现在序列中是不合法的,所以可以分为三种情况: (1):序列前只有一个A,如:BA,BBA,BABA. (2):序列前 ...

  9. 洛谷P2380 狗哥采矿

    P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...

随机推荐

  1. 转:集成平台 jira 的使用与方案

    http://wiki.csdn.net/pages/viewpage.action?pageId=1868089 作者:Martin Seibert SEIBERT MEDIA 首席执行官. 原文地 ...

  2. native method与so中function的关联

    在Android中,可以通过JNI的方式来调用和访问用C/C++实现的代码,这些代码以SharedLibrary的方式存在于so中.从Java Code到Native Code的一般使用过程为: 在J ...

  3. redis学习笔记——内存映射数据结构

    内存映射数据结构 解决问题:当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 内存映射数据结构是一系列经过特殊编码的字节序列,创建它们所消耗的内 ...

  4. shell 重定向输入

    #!/bin/bash NC_START="nc 192.168.76.227 9999" LOOP= ;i<$LOOP;i++)) do $NC_START << ...

  5. 效果超赞的基于js的chat组件和图形动画组件

    chat组件的地址是:http://ecomfe.github.io/echarts/doc/doc.html 图像动画组件的地址是:http://ecomfe.github.io/zrender/i ...

  6. 在服务端发起一个Post请求

    1.http://www.tuling123.com/openapi/api?key=9d2ff29d44b54e55acadbf5643569584&info=? 上面这个请求在服务端发起 ...

  7. vs无法引用项目问题

    vs无法引用项目问题 2017年12月13日 14:45:31 阅读数:582 开发时编译报错--项目A未被引用,展开项目的引用,发现该项目实质已经被引用了,但是该引用上有个黄色三角感叹号,遂移除该引 ...

  8. WebLogicSSL解决苹果IOS itms下载问题

    前提: 安装好openssl工具. 通过windows cmd 命令进入 openssl工作文件夹 如解压文件夹为:E:\ openssl-1.0.2-beta1 则工作文件夹为E:\openssl- ...

  9. [原创]个人工具 - 对APK极限压缩并对齐的工具(58.ReExtremeZipAndAlignAPK)

    2014年9月13日:RootExplorer_v2.21.1_Aligned对齐后:在华为U8860(2.3.6).酷派8150S(4.0.3)上安装滑动列表时,崩溃.原版本(已对齐)则OK.(不知 ...

  10. stage3D基础一-----Stage3D如何工作(转)

    在如何使用Stage3D系列中的第一个教程中,你将会学习到有关在Flash Player 11中新引入的ActionScript API,该API允许在Flash中利用硬件加速进行3D渲染.在学习这个 ...