URAL1553 Caves and Tunnels 树链剖分 动态树

URAL1553 维护一棵树,随时修改某个节点的权值,询问(x,y)路径上权值最大的点。

树是静态的,不过套动态树也能过,时限卡的严就得上树链剖分了。

还是那句话 splay的核心是splay(x) LCT的核心是access(x)

把SPOJ OTOCI的代码改了两行就过了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int MaxNode=131000;int Lch[MaxNode];
int Rch[MaxNode];
int Pnt[MaxNode];
int Data[MaxNode];
int Sum[MaxNode];
int Rev[MaxNode];
int List[MaxNode];
int maxv[MaxNode];
int Total;inline bool isRoot(int t){return (!Pnt[t]||(Lch[Pnt[t]]!=t&&Rch[Pnt[t]]!=t));
}
inline void Update(int cur){maxv[cur]=Data[cur];if(Lch[cur]!=0)maxv[cur]=max(maxv[cur],maxv[Lch[cur]]);if(Rch[cur]!=0)maxv[cur]=max(maxv[cur],maxv[Rch[cur]]);
}
void Reverse(int cur){if (!Rev[cur]) return;swap(Lch[cur],Rch[cur]);Rev[Lch[cur]]^=1;Rev[Rch[cur]]^=1;Rev[cur]=0;
}
void LeftRotate(int cur){if (isRoot(cur)) return;int pnt=Pnt[cur],anc=Pnt[pnt];Lch[pnt]=Rch[cur];if (Rch[cur]) Pnt[Rch[cur]]=pnt;Rch[cur]=pnt;Pnt[pnt]=cur;Pnt[cur]=anc;if (anc){if (Lch[anc]==pnt) Lch[anc]=cur;else if (Rch[anc]==pnt) Rch[anc]=cur;}Update(pnt);Update(cur);
}
void RightRotate(int cur){if (isRoot(cur)) return;int pnt=Pnt[cur],anc=Pnt[pnt];Rch[pnt]=Lch[cur];if (Lch[cur]) Pnt[Lch[cur]]=pnt;Lch[cur]=pnt;Pnt[pnt]=cur;Pnt[cur]=anc;if (anc){if (Rch[anc]==pnt) Rch[anc]=cur;else if (Lch[anc]==pnt) Lch[anc]=cur;}Update(pnt);Update(cur);
}
void Splay(int cur){int pnt,anc;List[++Total]=cur;for (int i=cur;!isRoot(i);i=Pnt[i]) List[++Total]=Pnt[i];for (;Total;--Total)if (Rev[List[Total]]) Reverse(List[Total]);while (!isRoot(cur)){pnt=Pnt[cur];if (isRoot(pnt)){// 父亲是根结点,做一次旋转if (Lch[pnt]==cur) LeftRotate(cur);else RightRotate(cur);}else{anc=Pnt[pnt];if (Lch[anc]==pnt){if (Lch[pnt]==cur) LeftRotate(pnt),LeftRotate(cur);// 一条线else RightRotate(cur),LeftRotate(cur);// 相反两次}else{if (Rch[pnt]==cur) RightRotate(pnt),RightRotate(cur);// 一条线else LeftRotate(cur),RightRotate(cur);// 相反两次}}}
}
int Expose(int u){int v=0;for (;u;u=Pnt[u]) Splay(u),Rch[u]=v,v=u,Update(u);for (;Lch[v];v=Lch[v]);return v;
}
void Modify(int x,int d){Splay(x);Data[x]=d;Update(x);
}
int Query(int x,int y){int rx=Expose(x),ry=Expose(y);if (rx==ry){for (int u=x,v=0;u;u=Pnt[u]){Splay(u);if (!Pnt[u]) return max(max(maxv[Rch[u]],Data[u]),maxv[v]);Rch[u]=v;Update(u);v=u;}}return -1;
}
bool Join(int x,int y){int rx=Expose(x),ry=Expose(y);if (rx==ry) return false;else{Splay(x);Rch[x]=0;Rev[x]=1;Pnt[x]=y;Update(x);return true;}
}
void Cut(int x){if (Pnt[x]){Expose(x);Pnt[Lch[x]]=0;Lch[x]=0;Update(x);}
}
int n,Q;void init(){Total=0;memset(Rev,0,sizeof(Rev));memset(Pnt,0,sizeof(Pnt));memset(Lch,0,sizeof(Lch));memset(Rch,0,sizeof(Rch));memset(Sum,0,sizeof(Sum));memset(Data,0,sizeof(Data));memset(maxv,0,sizeof(maxv));
}
char cmd[22];
int main()
{   freopen("t.txt","r",stdin);init();scanf("%d",&n);for(int i=0;i<n-1;i++){int a,b;scanf("%d%d",&a,&b);Join(a,b);}scanf("%d",&Q);while (Q--){int x,y;scanf("%s%d%d",cmd,&x,&y);if (cmd[0]=='I'){Modify(x,Data[x]+y);}if (cmd[0]=='G'){printf("%d",Query(x,y));if(Q>0)printf("\n");}}return 0;
}

  

转载于:https://www.cnblogs.com/heisenberg-/p/6597097.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zb——中国人发起的编程语言之序章

20181110 大背景 贸易战&#xff0c;java11收费&#xff0c;python go等百家争鸣&#xff0c;但是没有一个是中国人发起创立的语言。 思考 夜来奇想&#xff0c;java不行了还有go&#xff0c;go如果要是不行了呢&#xff1f;python等都不行了呢&#xff1f; 中国人自己发起…

华为5g鸿蒙折叠,华为再次亮剑!5G新旗舰已经确认,折叠屏+升级到鸿蒙2.0,价格过万...

每年华为有两个新机上市高峰期&#xff0c;一个是年初的P系列发布之后&#xff0c;华为Nova系列、荣耀数字系列会跟着发布&#xff1b;另一个则是年底的华为Mate系列发布之后&#xff0c;华为Nova新系列和荣耀V系列也会一起发布。现在已经是9月底&#xff0c;再等不到一个月的时…

docker服务无法启动 神坑

背景环境 centos6 docker1.7 service docker status输出&#xff1a; docker dead but subsys locked 各种找资料 尝试&#xff1a; rm -rf /var/run/docker.* rm -rf /var/lock/subsys/docker &#xff08;备注&#xff1a;如果有需要备份的docker此处千万不要用rm -r…

apicloud,aliyunlive,测试成功

1.推流 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0"><ti…

centos7 编译安装nginx 设置自启动服务 支持https

编译环境安装 yum install -y gcc-c yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 下载nginx.tar.gz 编译 tar -xzvf nginx-1.15.3.tar.gz cd nginx-1.15.3 ./configure --sbin-path/usr/local/nginx/nginx -…

idea自动补全html标签,webstorm(idea)常见自动补全方法和常用快捷键

一&#xff1a;标签自动补全&#xff1a;(1)纯标签补全例&#xff1a;输入h1,按Tab键&#xff0c;(2)纯标签地址“id”例&#xff1a;输入h1#ccg,按Tab键&#xff0c;(3)纯标签类“class”例&#xff1a;输入h1.ccg,按Tab键&#xff0c;(4)标签子标签子标签个数例&#xff1a;输…

走进netty

三月份开始看公司RPC框架的源码,发现如果要折腾明白,网络通讯这块知识必不可少.于是从如下几点开始逐步研究. 一、基础知识篇 1.Unix下5种I/O模型 Linux的内核将所有外部设备都看作一个文件来操作,对于一个文件的读写操作会调用内核提供的系统命令,返回一个fd(文件描述符),而对…

html页面text固定长度,HTML中input type=text和type=password 显示的长度不一样

springmvc下js控制表单提交(表单提交前检验&#xff0c;提交后获取json返回值)这个问题我搞了四天,终于搞懂.因为对js很不熟悉.郁闷的是后台代码出错总可以设置断点调试,前端js代码出错只能通过浏览器提供一些运行数据来分析,很不习惯. 首先说下逻辑:这是一个注册功能,我希望,注…

springboot health检查

health检查一般用于spring cloud注册中心的存活检查&#xff0c;比如spring cloud consul配置 spring:cloud:consul:discovery:register: trueinstance-id: ${spring.application.name}:${server.port}service-name: ${spring.application.name}port: ${server.port}healthChe…

Sql server日期函数操作

1、获取前一小时内的数据&#xff1a;DATEADD(HOUR,-1,GETDATE())&#xff0c;将"HOUR"替换成DAY&#xff0c;Month,YEAR就是前一天&#xff0c;前一月&#xff0c;前一年 2、获取日期部分&#xff0c;格式为&#xff1a;yyyy-MM-dd, CONVERT(CHAR(10),GETDATE(),120…

div跳转html页面底部,即使没有内容,如何强制DIV块扩展到页面底部?

在下面显示的标记中&#xff0c;我试图使内容div一直延伸到页面底部&#xff0c;但是只有在有要显示的内容时才拉伸。我要这样做的原因是&#xff0c;即使没有任何内容要显示&#xff0c;垂直边框仍会在页面下方显示。这是我的HTML&#xff1a;而我的CSS&#xff1a;body {font…

Spring Cloud Gateway去掉url前缀

主要是增加一个 route&#xff0c;其他配置不变 routes:- id: service_customeruri: lb://CONSUMERorder: 0predicates:- Path/customer/**filters:- StripPrefix1- AddResponseHeaderX-Response-Default-Foo, Default-Bar 新增的StripPrefix可以接受一个非负整数&#xff0c;对…

ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator

ASM与defaultServant&#xff0c;ServantLocator都是与调用调度&#xff08;Dispatch&#xff09;相关的。 ASM是ServantManager中的一张二维表_servantMapMap&#xff0c;默认Servant则由_defaultServantMap和_locatorMap两张一维表维护。一个对 象可由这样的字符串指定"…

html属性wmode代码,html – wmode – 浏览器的渲染行为意味着什么?

wmode是< embed>独有的参数标签是指Flash电影.默认值为wmode window.WMODE 窗口当wmode window时,Flash影片不会在页面中呈现.它显示在与浏览器内容不同的单独窗口中(如使用Spy或WinSpy检查).此模式将具有最佳性能,因为浏览器不必在每个帧上重绘页面的一部分.但是,此模…