让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,并且知道它们在每个格子内的数量是 ...
随机推荐
- 2017.7.1 mysql安装与启动(已验证可以使用)
下载地址:http://learning.happymmall.com/ 之前一直用解压版安装,启动mysql服务的时候总是失败,这次用mysql installer安装一遍,终于成功启动. 1.下载 ...
- Spring 配置多个数据源,并实现动态切换
1.配置两个不同的数据源,如下 <!-- 数据源配置1 --> <bean id="testDataSource1" class="com.alibab ...
- Solidworks 如何快速完全定义草图
工具-尺寸标注-完全定义草图
- CSS——如何清除浮动
众所周知,平时在写HTML代码时,难免少不了使用Float样式,这样一来,假使您没有清除浮动,那么有浮动元素的父元素容器将元素将无法自动撑开.换句简单好理解的话来说,假如你在写CODE时,其中div. ...
- iOS使用自己定义字体
1.加入相应的字体(.ttf或.odf)到project的resurce,比如my.ttf. 2.在info.plist中加入一项 Fonts provided by application (ite ...
- 【Excle数据透视表】如何调整压缩形式显示下的缩进字符数
调整前: ...
- 【BIEE】[nQSError: 35008]尝试从服务器检出对象时出错。请验证服务器设置。
今天在使用PRD时,我先导入表A,然后觉得表A的名字不好,就把导入的表A重命名为表A_TMP,接着保存资料库就卡住了"未响应"(一般不会出现这种问题) 接着我直接使用任务管理器强制 ...
- mongo: 索引
索引创建 在学习索引之前,我们先看一下,如果没有添加索引时,我们用explain()函数,查看查询计划是什么样的. 发现使用的是BasicCursor,那么就代表我们没有索引,当我们查某一个数据的时候 ...
- 关系型数据的分布式处理系统MyCAT(转载)
——概述和基本使用教程 日期:2014/12/24 文:阿蜜果 1. MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建 ...
- IP数据库生成器
代码地址如下:http://www.demodashi.com/demo/12688.html 项目放在github上,python版本ipdb_creator,java版本ip-locator. 项 ...