URAL1553 Caves and Tunnels
2017-02-12 09:46
197 查看
LCT模板题
代码
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #define L(i) (T[i].s[0]) #define R(i) (T[i].s[1]) #define F(i) (T[i].fa) #define Loc(i) (R(F(i))==i) #define For(i,j,k) for(register int i=(j);i<=(int)k;i++) #define Forr(i,j,k) for(register int i=(j);i>=(int)k;i--) #define Set(a,b) memset(a,b,sizeof(a)) using namespace std; const int N=200010; int Begin ,to[N*2],Next[N*2],e,n,m; inline void add(int x,int y){ to[++e]=y;Next[e]=Begin[x];Begin[x]=e; } inline void read(int &x){ x=0;char c=getchar();int f=(c=='-'); while(c<'0'||c>'9')c=getchar(),f|=(c=='-'); while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); if(f)x=-x; } struct node{ int s[2],fa,rev,v,mx; }; struct LCT{ node T ; inline void pushup(int x){ T[x].mx=max(max(T[L(x)].mx,T[R(x)].mx),T[x].v); } inline void pushdown(int x){ if(T[x].rev){ T[x].rev^=1,T[L(x)].rev^=1,T[R(x)].rev^=1; swap(L(x),R(x)); } } inline bool isrt(int x){ return R(F(x))!=x&&L(F(x))!=x; } void Pushdown(int x){ if(!isrt(x))Pushdown(F(x)); pushdown(x); } inline void Rotate(int x){ int A=F(x),B=F(A),l=Loc(x),r=l^1,d=Loc(A); if(!isrt(A))T[B].s[d]=x;F(x)=B; F(A)=x,F(T[x].s[r])=A,T[A].s[l]=T[x].s[r],T[x].s[r]=A; pushup(A),pushup(x); } inline void splay(int x){ Pushdown(x); while(!isrt(x)){ if(!isrt(F(x)))Rotate(x); Rotate(x); } } inline void access(int x){ for(int i=0;x;i=x,x=F(x)) splay(x),R(x)=i,pushup(x); } inline void reverse(int x){ access(x),splay(x),T[x].rev^=1; } inline void modify(int x,int v){ access(x),splay(x),T[x].v+=v,pushup(x); } inline int query(int x,int y){ reverse(x),access(y),splay(y); return T[y].mx; } inline void clear(){ Set(T,0); } }t; void dfs(int u,int fa){ for(int i=Begin[u];i;i=Next[i]){ int v=to[i]; if(v==fa)continue; t.T[v].fa=u; dfs(v,u); } } char st[10]; int main(){ int u,v; while(scanf("%d",&n)!=EOF){ Set(Begin,0),e=0;t.clear(); For(i,1,n-1){ read(u),read(v); add(u,v),add(v,u); } dfs(1,0); read(m); while(m--){ scanf("%s",st); read(u),read(v); if(st[0]=='I')t.modify(u,v); else printf("%d\n",t.query(u,v)); } } }
相关文章推荐
- URAL 1553. Caves and Tunnels 树链剖分
- URAL 1553. Caves and Tunnels 树链拆分
- URAL 题目1553. Caves and Tunnels(Link Cut Tree 修改点权,求两点之间最大)
- URAL 1553 Caves and Tunnels(树链剖分-点更新-区间最值查)
- 【URAL】1553 Caves and Tunnels
- URAL 题目1553. Caves and Tunnels(Link Cut Tree 改动点权,求两点之间最大)
- [URAL 1553]Caves and tunnels(树链剖分)
- Ural1553.Caves and Tunnels
- URAL 1553 Caves and Tunnels(LCT动态树)
- URAL 1553【CAVE and TUNNEL】
- URAL 1026. Questions and answers
- URAL1088 Ilya Murometz
- Ural 1017
- ural 1014 Product of Digits
- ural 1038 Spell Checker
- ural1753_三分
- ural 1080. Map Coloring
- ural 1645. Ski Race
- ural 1028【树状数组】
- Ural_1403