让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,并且知道它们在每个格子内的数量是 ...
随机推荐
- 不是书评 :《我是一只IT小小鸟》
本文转自刘未鹏 博客,写的非常的好 就转回来了 设计你自己的进度条 进度条的设计是一个很多人都知道的故事:同样的耗时,如果不给任何进度提示,只是在完成之后才弹出一个完成消息,中间没有任何动态变化,那么 ...
- Android学习(十) SQLite 基于内置函数的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Php 中如何将内容写入log日志中
$Str = '你想要存的内容'; file_put_contents('abc.log', "\r\n\r\n". $Str, FILE_APPEND); FILE_AP ...
- 测试代码覆盖率工具学习(Android Emma)
博客分类: 工具分享 eclipseeclemmaemmatestng 关于eclemma的历史和怎么安装,请参考http://www.ibm.com/developerworks/cn/ ...
- unsigned int与int相加问题
作者 : 卿笃军 一道unsigned int与int类型的相加题目.引发了我对这个问题的思考. 首先要明确两个问题: 问题一. unsigned int 和 int究竟哪个能表达出来的数上限大呢? ...
- elasticsearch 单节点实现
一.安装java环境,这么不说了,一般用源码安装,配置好环境变量 二.新建es用户和组,es不能用root启动 三.下载需要的稳定版es 四.解压安装es .zip /opt/app/ es / 五. ...
- Laravel 数据库实例教程 —— 使用DB门面操作数据库
Laravel支持多种数据库,包括MySQL.Postgres.SQLite和SQL Server,在Laravel中连接数据库和查询数据库都非常简单,我们可以使用多种方式与数据库进行交互,包括原生S ...
- 查看Tomcat状态页,管理app,主机管理
Server Status 通过点击这个按钮我们可以查看Tomcat的状态,点击,弹出403错误页面 通过查看官方文档 因此,创建manager.xml # cat /usr/local/tomcat ...
- [转载]Axure RP 7.0下载地址及安装说明
Axure RP是产品经理必备的原型制作工具,因为很多同学是新手,在这里整理一下axure7.0的下载.安装和汉化流程,希望能够帮到大家. Axure RP是美国Axure Software Solu ...
- traceroute 命令
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一 ...