Uva1553 Caves and Tunnels LCT
2024-09-01 16:48:40
简单题,主要为了练手。
#include <cstdio>
#include <iostream>
#define maxn 100010
using namespace std; namespace L {
int pnt[maxn], pre[maxn], son[maxn][], rtg[maxn], val[maxn], mxv[maxn]; inline void update( int nd ) {
mxv[nd] = max( val[nd], max(mxv[son[nd][]],mxv[son[nd][]]) );
}
void rotate( int nd, int d ) {
int p = pre[nd];
int s = son[nd][!d];
int ss = son[s][d];
son[nd][!d] = ss;
son[s][d] = nd;
if( p ) son[p][ nd==son[p][] ] = s;
else pnt[s] = pnt[nd];
pre[nd] = s;
pre[ss] = nd;
pre[s] = p;
update(nd);
update(s);
}
void pushdown( int nd ) {
if( rtg[nd] ) {
int &ls=son[nd][], &rs=son[nd][];
swap(ls,rs);
rtg[ls] ^= ;
rtg[rs] ^= ;
rtg[nd] = ;
}
}
void bigpush( int nd ) {
if( pre[nd] ) bigpush(pre[nd]);
pushdown(nd);
}
void splay( int nd, int top= ) {
bigpush(nd);
while( pre[nd]!=top ) {
int p = pre[nd];
int nl = nd==son[p][];
if( pre[p]==top ) {
rotate( p, nl );
} else {
int pp = pre[p];
int pl = p==son[pp][];
if( nl==pl ) {
rotate( pp, pl );
rotate( p, nl );
} else {
rotate( p, nl );
rotate( pp, pl );
}
}
}
}
void access( int nd ) {
int u = nd;
int v = ;
while( u ) {
splay(u);
int s = son[u][];
pre[s] = ;
pnt[s] = u;
pre[v] = u;
son[u][] = v;
update(u);
v = u;
u = pnt[u];
}
splay(nd);
}
void init( int n ) {
for( int i=; i<=n; i++ )
pnt[i] = pre[i] = son[i][] = son[i][]
= rtg[i] = val[i] = mxv[i] = ;
}
void makeroot( int nd ) {
access(nd);
rtg[nd] ^= ;
}
void link( int u, int v ) {
makeroot(u);
makeroot(v);
pnt[u] = v;
}
void inc_val( int nd, int w ) {
splay( nd );
val[nd] += w;
update( nd );
}
int qu_max( int u, int v ) {
makeroot(u);
access(v);
return max( val[v], mxv[son[v][]] );
}
}; int n, q; int main() {
scanf( "%d", &n );
L::init(n);
for( int i=,u,v; i<=n; i++ ) {
scanf( "%d%d", &u, &v );
L::link(u,v);
}
scanf( "%d", &q );
while( q-- ) {
char ch[];
int u, v, w;
scanf( "%s", ch );
if( ch[]=='I' ) {
scanf( "%d%d", &u, &w );
L::inc_val(u,w);
} else {
scanf( "%d%d", &u, &v );
printf( "%d\n", L::qu_max(u,v) );
}
}
}
最新文章
- video 手机全屏自动播放
- 安装composer
- noip模拟赛(一)宠物之战
- ORACLE创建表之前判断表是否存在与SQL Server 对比使用
- 定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间
- Tomcat 集群模式下 Session 更新 Bug (redis memcached 及tomcat自已的集群)
- 使用PyInstaller将Python程序打包成一个单独的exe文件
- iOS 进阶 第十七天(0420)
- [转载]mysql慢日志文件分析处理
- SourceGrid zt
- 提高xshell使用效率
- mac安装office2011,提示无法打开文件Normal.dotm,因为内容有错误
- Codeforces #252 (Div. 2) B. Valera and Fruits
- Powerdesigner+PostgreSQL
- python代码格式
- 学习 MeteoInfo二次开发教程(四)
- Asp.Net Core WebAPI入门整理(三)跨域处理
- JAVA基础知识总结:一到二十二全部总结
- 第 7 章 多主机管理 - 046 - 创建 Machine
- All you should know about NUMA in VMware!
热门文章
- python初步学习-生成式、生成器、迭代器、装饰器
- Http Header信息&;状态码
- linux wc命令的作用。
- ltib安装过程中遇到好多问题,从网上转来的好多份总结
- vsts 自动部署到Azure
- POJ 3278 Catch That Cow(简单BFS)
- Valid Sudoku&;&;Sudoku Solver
- fedora下中文输入fcitx4.0
- Canvas进阶——制作小游戏【贪吃蛇】
- Could not apply the stored configuration for monitors