类似维护括号序列,给每个点建两个点,然后所有操作都能轻松支持了。注意sum和lastans是long long。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
#define For(i,x) for (int i=h[x],k; i; i=nxt[i])
typedef long long ll;
using namespace std; const int N=;
ll ans,sm[N];
int n,nd,tim,rt,op,x,y,m,cnt,a[N],tag[N];
int v[N],f[N],L[N],R[N],sz[N],c[N][],h[N],to[N],nxt[N]; void add(int u,int v){ to[++cnt]=v; nxt[cnt]=h[u]; h[u]=cnt; } void dfs(int x,int fa){
L[x]=++tim; v[tim]=a[x];
For(i,x) if ((k=to[i])!=fa) dfs(k,x);
R[x]=++tim; v[tim]=a[x];
} void upd(int x){
sm[x]=sm[c[x][]]+sm[c[x][]]+v[x];
sz[x]=sz[c[x][]]+sz[c[x][]]+;
} void put(int x,int k){ v[x]+=k; sm[x]+=1ll*k*sz[x]; tag[x]+=k; } void push(int x){
if (!tag[x]) return;
if (c[x][]) put(c[x][],tag[x]);
if (c[x][]) put(c[x][],tag[x]);
tag[x]=;
} void pd(int x){ if (f[x]) pd(f[x]); push(x); } int build(int l,int r){
int mid=(l+r)>>,x=mid;
if (l<mid) c[x][]=build(l,mid-),f[c[x][]]=x;
if (mid<r) c[x][]=build(mid+,r),f[c[x][]]=x;
upd(x); return x;
} void rot(int &rt,int x){
int y=f[x],z=f[y],w=c[y][]==x;
if (y==rt) rt=x; else c[z][c[z][]==y]=x;
f[x]=z; f[y]=x; f[c[x][w^]]=y; c[y][w]=c[x][w^];
c[x][w^]=y; upd(y);
} void splay(int &rt,int x){
for (pd(x); x!=rt; rot(rt,x)){
int y=f[x],z=f[y];
if (y!=rt) (c[z][]==y)^(c[y][]==x) ? rot(rt,x) : rot(rt,y);
}
upd(x);
} int pre(int x){ splay(rt,x); for (x=c[x][]; c[x][]; x=c[x][]); return x; }
int lst(int x){ splay(rt,x); for (x=c[x][]; c[x][]; x=c[x][]); return x; } void Ins(int x,int y){
int k=lst(L[x]); splay(rt,L[x]); splay(c[rt][],k);
c[k][]=++nd; v[nd]=y; f[nd]=k; R[++n]=nd;
nd++; c[nd-][]=nd; v[nd]=y; f[nd]=nd-; L[n]=nd;
upd(nd); upd(nd-); upd(k); upd(rt);
} void Add(int x,int y){
int l=pre(L[x]),r=lst(R[x]); splay(rt,l); splay(c[rt][],r);
put(c[r][],y); upd(r); upd(rt);
} void Del(int x){
int l=pre(L[x]),r=lst(R[x]); splay(rt,l); splay(c[rt][],r);
c[r][]=f[c[r][]]=; upd(r); upd(rt);
} ll Que(int x){ int l=pre(L[x]),r=lst(R[x]); splay(rt,l); splay(c[rt][],r); return sm[c[r][]]; } int main(){
freopen("anudtq.in","r",stdin);
freopen("anudtq.out","w",stdout);
scanf("%d",&n);
rep(i,,n) scanf("%d",&a[i]);
rep(i,,n) scanf("%d%d",&x,&y),x++,y++,add(x,y),add(y,x);
tim=; dfs(,); rt=build(,tim+); nd=tim+; scanf("%d",&m);
rep(i,,m){
scanf("%d%d",&op,&x); x+=ans+;
if (op==) scanf("%d",&y),Ins(x,y);
if (op==) scanf("%d",&y),Add(x,y);
if (op==) Del(x);
if (op==) printf("%lld\n",ans=Que(x)/);
}
return ;
}

[CodeChef-ANUDTQ] Dynamic Trees and Queries的更多相关文章

  1. Codechef Dynamic Trees and Queries

    Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...

  2. CodeChef DGCD Dynamic GCD

    CodeChef题面 Time limit 210 ms Code length Limit //内存限制也不说一下,真是的-- 50000 B OS Linux Language limit C, ...

  3. 【CodeChef】Chef and Graph Queries

    Portal --> CC Chef and Graph Queries Solution 快乐数据结构题(然而好像有十分优秀的莫队+可撤销并查集搞法qwq) 首先考虑一种方式来方便一点地..计 ...

  4. [CodeChef - GERALD07 ] Chef and Graph Queries

    Read problems statements in Mandarin Chineseand Russian. Problem Statement Chef has a undirected gra ...

  5. codechef Chef And Easy Xor Queries

    做法:我们考虑前缀异或和,修改操作就变成了区间[i,n]都异或x 查询操作就变成了:区间[1,x]中有几个k 显然的分块,每个块打一个tag标记表示这个块中所有的元素都异或了tag[x] 然后处理出这 ...

  6. Creating dynamic/configurable parameterized queries in Entity Framework

    https://dillieodigital.wordpress.com/2013/05/09/creating-dynamicconfigurable-parameterized-queries-i ...

  7. [bzoj3514][CodeChef GERALD07] Chef ans Graph Queries [LCT+主席树]

    题面 bzoj上的强制在线版本 思路 首先可以确定,这类联通块相关的询问问题,都可以$LCT$+可持久化记录解决 用LCT维护生成树作为算法基础 具体而言,从前往后按照边的编号顺序扫一遍边 如果这条边 ...

  8. codechef FUN WITH TREES

    题目大意: 给一棵树root=1的树: 给一些操作:u  v 的路径所有节点的node + val: 最后m个询问:u 节点(包括u) sum%mod 是多少. LCA + RMQ: 我们每次mark ...

  9. BZOJ3514 / Codechef GERALD07 Chef and Graph Queries LCT、主席树

    传送门--BZOJ 传送门--VJ 考虑使用LCT维护时间最大生成树,那么对于第\(i\)条边,其加入时可能会删去一条边.记\(pre_i\)表示删去的边的编号,如果不存在则\(pre_i = 0\) ...

随机推荐

  1. 计蒜客 39268.Tasks-签到 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest A.) 2019ICPC西安邀请赛现场赛重现赛

    Tasks It's too late now, but you still have too much work to do. There are nn tasks on your list. Th ...

  2. nRF51822 主从断开连接Reason,HCI ERROR CODE :0x003E

    最近在给一个客户调主从一体的模块,基于S130,距离稍微远一点就会出现连接上后立马又断开连接的现象, 追踪了一下原因,给出的 HCI Error code 是 0x003E,暂且不知道这是什么鬼,查了 ...

  3. JS和JQuery实现Button绑定键盘Enter事件实现提交

    JavaScript实现方法 document.onkeydown = function(e) { if (!e) e = window.event;//火狐中是 window.event if (( ...

  4. Edusoho之X-Auth-Token

    昨天这篇文章Edusoho之Basic Authentication提到了X-Auth-Token.今天我主要讲的是Edusoho之X-Auth-Token的请求API方式. 至于为什么建议不要用HT ...

  5. Node Addon

    Node Addon as bridge between javascript and C++ #include <node.h> namespace HelloWorldDemo { u ...

  6. 刷题记录:[FBCTF2019]Products Manager

    目录 刷题记录:[FBCTF2019]Products Manager 一.知识点 1.基于约束的SQL注入攻击 刷题记录:[FBCTF2019]Products Manager 题目复现链接:htt ...

  7. ubuntu之路——day17.2 RGB图像的卷积、多个filter的输出、单个卷积层的标记方法

    和单层图像的卷积类似,只需要对每一个filter构成的三层立方体上的每一个数字与原图像对应位置的数字相乘相加求和即可. 在这个时候可以分别设置filter的R.G.B三层,可以同时检测纵向或横向边缘, ...

  8. #C++初学记录(动态规划 被3整除的子序列)

    原题:牛客网 动态规划dynamic programming 的入门级题目 题目描述 : 给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模 输入描述: 输入一 ...

  9. golang testing 无法获取覆盖率问题

    https://segmentfault.com/q/1010000021142202

  10. eclipse没有server选项怎么解决

    eclipse没有server选项怎么解决 步骤: 1,在eclipse菜单“Help”中选择“InstallNew Software”如下图所示. 2,然后在Work with中点击Add,如下图所 ...