让lu哥头痛了许久的代码(洛谷:树的统计)
错在单点修改时传的是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哥头痛了许久的代码(洛谷:树的统计)的更多相关文章
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- 期待许久的事情终于发生-微软收购Xamarin
刚在VS推送的新闻中看到了醒目的标题:Microsoft to acquire Xamarin and empower more developers to build apps on any dev ...
- 【阔别许久的博】【我要开始攻数学和几何啦】【高精度取模+同余模定理,*】POJ 2365 The Embarrassed Cryptographer
题意:给出一大数K(4 <= K <= 10^100)与一整数L(2 <= L <= 106),K为两个素数的乘积(The cryptographic keys are cre ...
- 获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)
刚开始到现在公司的时候接到一个任务:开发一个activex控件,自动操作本地exe程序,当时遇到弹出菜单无法获取的问题,还好不影响,最近又遇到这个问题,绕不过去了,于是昨天花了一个上午百度了个遍,总算 ...
- docker 网络模式研究了许久,其实我们需要的是docker run -p 80:80命令
我们只是希望能够从外部访问到docker而已,并不需要去折腾该死的网络模式,桥接,host等等. -p: 端口映射,格式为:主机(宿主)端口:容器端口 sudo docker run -t -i - ...
- 被我忽略许久的set
心塞,set一直是我忽略的一个数据结构 1.生成一个set: 1) set(iterable) 传入一个可以迭代的数据结构: eg:字符串;元组;列表,字典 2) {v1,v2,.......,vn} ...
- 关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑
---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时间板子就死机了. 使用自己的就不会死机, ...
- 洛谷 P4838 P哥破解密码 题解
矩阵乘法 + 快速幂优化递推: 看到这个题目我们不难想到递推,题干中说3个连续的A出现在序列中是不合法的,所以可以分为三种情况: (1):序列前只有一个A,如:BA,BBA,BABA. (2):序列前 ...
- 洛谷P2380 狗哥采矿
P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...
随机推荐
- 01.Hello Node.js
程序下载:https://files.cnblogs.com/files/xiandedanteng/helloNodejs.rar 关键代码: var http=require('http'); v ...
- 求出数组中所有数字的和&&弹出层效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python——内置对象
python的内置对象 对象类型 常量示例/用法 Number(数字) 3.14159, 1234, 999L 3+4j String(字符串) 'spam', "guido's" ...
- 【Excle数据透视表】如何得到数据透视表中某个汇总行的明细数据
例如: 现在想得到"北京 汇总"的明细数据,该怎么处理呢? 步骤 右键数据透视表任意单元格→数据透视表选项→启用显示明细数据→确定→单击"北京 汇总"行最后一个 ...
- Android开发环境搭建 for windows (linux类似) 详细可参考“文件”中“Android开发环境搭建.pdf ”
ADT-Bundle for Windows 是由Google Android官方提供的集成式IDE,已经包含了Eclipse,你无需再去下载Eclipse,并且里面已集成了插件,它解决了大部分新手通 ...
- RAD Studio XE8 技术研讨会讲义与范例程序下载
感谢各位程序猿亲临现场參加我们的公布会,现奉上会议当天的讲义与范例程序供大家參考: 2015/5/25~27北京.深圳 『RAD Studio XE8技术研讨会』 下载讲义:http://pan ...
- ssh隧道远程连接mysql
有时候比如一些云主机,没有开放3306端口,这里可以用ssh隧道来连接数据库,更加安全 注意点: 1.本地ssh可以登录远程服务器,(密码或者秘钥) 2.远程数据库需要赋权限给隧道端的ip 命令: s ...
- Java后台代码调用Spring的@Service Bean的方式
比如:在我的project中有一个类CompassIndexOperation,以: @Service("CompassIndexOperation") @Transactiona ...
- Hibernate学习之属性级别注解
© 版权声明:本文为博主原创文章,转载请注明出处 属性级别注解 添加方式 1. 写在属性字段上面 2. 写在属性getter方法上面 @Id:必须,定义了映射到数据库表的主键属性,一个实体可以有一个或 ...
- EularProject 39:给周长推断构成直角三角形个数
华电北风吹 天津大学认知计算与应用重点实验室 完毕日期:2015/7/30 Integer right triangles Problem 39 If p is the perimeter of a ...