【hdu 5052】
来源:互联网 发布:目前最好的排序算法 编辑:程序博客网 时间:2024/06/05 10:51
#include<cstdio>#include<cstring>#include<iostream>#define maxn 1000021#define ls(u) ch[u][0] #define rs(u) ch[u][1]#define inf 0x3fffffffusing namespace std;int T,n,m,ch[maxn][2],Max[maxn],Min[maxn],val[maxn],lz[maxn];int q[maxn],fa[maxn],flag[maxn],ans[maxn],head[maxn],tot=1,ans2[maxn];struct edge{int v,next;}e[maxn*2];void adde(int a,int b){e[tot].v=b,e[tot].next=head[a];head[a]=tot++;}void pre(){Max[0]=-inf,Min[0]=inf;for(int i=1;i<=n;i++){ls(i)=rs(i)=0;fa[i]=0;head[i]=lz[i]=flag[i]=ans[i]=0;}fa[1]=0,tot=1;}inline int Q(int u){return u==rs(fa[u]);}inline int isrt(int u){return !fa[u]||(u!=ls(fa[u])&&u!=rs(fa[u]));}inline void push_up(int u){Max[u]=max(max(Max[ls(u)],Max[rs(u)]),val[u]);Min[u]=min(min(Min[ls(u)],Min[rs(u)]),val[u]);ans[u]=max(ans[ls(u)],ans[rs(u)]);ans[u]=max(ans[u],Max[rs(u)]-Min[ls(u)]);ans[u]=max(ans[u],val[u]-Min[ls(u)]);ans[u]=max(ans[u],Max[rs(u)]-val[u]);ans2[u]=max(ans2[ls(u)],ans2[rs(u)]);ans2[u]=max(ans2[u],Max[ls(u)]-Min[rs(u)]);ans2[u]=max(ans2[u],val[u]-Min[rs(u)]);ans2[u]=max(ans2[u],Max[ls(u)]-val[u]);}inline void change(int u,int x){val[u]+=x,lz[u]+=x;Max[u]+=x,Min[u]+=x;}inline void push_down(int u){if(!flag[u]&&!lz[u])return;if(flag[u]){swap(ls(u),rs(u));if(ls(u))flag[ls(u)]^=1,swap(ans[ls(u)],ans2[ls(u)]);if(rs(u))flag[rs(u)]^=1,swap(ans[rs(u)],ans2[rs(u)]);flag[u]=0;}if(lz[u]){if(ls(u))change(ls(u),lz[u]);if(rs(u))change(rs(u),lz[u]);lz[u]=0;}}void rotate(int u){int d=!Q(u),f=fa[u],ff=fa[f];if(!isrt(f))ch[ff][Q(f)]=u;fa[u]=ff;if(ch[u][d])fa[ch[u][d]]=f;ch[f][!d]=ch[u][d];fa[f]=u,ch[u][d]=f;push_up(f);push_up(u);}void splay(int u){int x=u;for(q[*q=1]=u;!isrt(x);x=fa[x])q[++(*q)]=fa[x];for(int i=*q;i>=1;i--)push_down(q[i]);for(int i=1;i<=*q;i++)push_up(q[i]);while(!isrt(u)){int f=fa[u];if(isrt(f))rotate(u);else{if(Q(f)==Q(u))rotate(f);else rotate(u);rotate(u);}}}void access(int u){for(int x=0;u;u=fa[x=u]){splay(u);rs(u)=x;push_up(u);}}void makert(int u){access(u);splay(u);flag[u]^=1;swap(ans[u],ans2[u]);}void query(int a,int b,int v){makert(a);access(b);splay(b);printf("%d\n",ans[b]);change(b,v);}void dfs(int u,int f){fa[u]=f;for(int v,i=head[u];i;i=e[i].next){if((v=e[i].v)==f)continue;dfs(v,u);}}void solve(){scanf("%d",&m);int a,b,v;while(m--){scanf("%d%d%d",&a,&b,&v);query(a,b,v);}}int main(){scanf("%d",&T);while(T--){scanf("%d",&n);pre();for(int i=1;i<=n;i++)scanf("%d",val+i);for(int a,b,i=1;i<n;i++){scanf("%d%d",&a,&b);adde(a,b),adde(b,a);}dfs(1,0);solve();}return 0;}
0 0
- 【hdu 5052】
- hdu 5052 (LCT)
- HDU 5052 LCT
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- Task com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@38ad0a (in deadlocked PoolThread) fai
- xml和html的区别以及特点
- c++优化工具Gprof
- mac80211解析三
- 506. Relative Ranks (E)
- 【hdu 5052】
- java之静态方法与非静态方法
- 自定义view之RoundImageView
- HDU5952-Counting Sheep
- 实现公告或其他字体宽度不够自动隐藏用...代替的方法
- stm32学习笔记之GPIO配置
- iOS Swift3.0异步设置任意弧度高性能圆角图片
- Unity实现简单贪吃蛇
- PAT甲级练习1027. Colors in Mars (20)