FZU2277 Change(dfs序+树状数组)
来源:互联网 发布:佳能网络打印机设置ip 编辑:程序博客网 时间:2024/06/04 19:44
题意
q次操作,操作有两种:
1 v x k:a[v]+=x,a[v’]+=x-k(v’是v的子节点)…
2 v:查询
Sample Input
131 131 1 2 12 12 2
Sample Output
21
这个地方的思路应该是一种套路。多学学。。
可以参考https://vjudge.net/solution/10068685的。。
我的代码不知道什么地方错了。re。。。
int fst[N],vv[N<<1],nxt[N<<1],tot;int dep[N];LL xval[N<<2],kval[N<<2];int n;int sid[N],tid[N];void add(int u,int v){ vv[tot]=v;nxt[tot]=fst[u];fst[u]=tot++;}void dfs(int u,int fa){ sid[u]=++cnt; for(int i=fst[u];~i;i=nxt[i]){ int v=vv[i]; if(v==fa)continue; dep[v]=dep[u]+1; dfs(v,u); } tid[u]=cnt;}inline int lowbit(int x){return x&(-x);}void upx(int x,LL val){ while(x<=n){ xval[x]=(xval[x]+val)%mod; x+=lowbit(x); }}void upk(int x,LL val){ while(x<=n){ kval[x]=(kval[x]+val)%mod; x+=lowbit(x); }}LL qx(int x){ LL ret=0; while(x){ ret=(ret+xval[x])%mod; x-=lowbit(x); } return ret;}LL qk(int x){ LL ret=0; while(x){ ret=(ret+kval[x])%mod; x-=lowbit(x); } return ret;}int main(){ int T;sf("%d",&T); while(T--){ mem(dep,0);mem(fst,-1);tot=0;mem(kval,0);mem(kval,0);cnt=0; sf("%d",&n); rep(i,2,n){ int x;sf("%d",&x);add(i,x);add(x,i); } dep[1]=0; dfs(1,1); int q;sf("%d",&q); while(q--){ LL op,v,x,k;sf("%lld",&op); if(op==1){ sf("%lld%lld%lld",&v,&x,&k); upk(sid[v],k); upx(sid[v],(x+(k*dep[v])%mod)%mod); upk(tid[v]+1,-k);upx(tid[v]+1,-(x+(x*dep[v])%mod)%mod); } else{ sf("%lld",&v); LL x=qx(sid[v]); LL k=qk(sid[v]); pf("%lld\n",(x-k*dep[v]%mod+mod)%mod); } } }}
阅读全文
0 0
- FZU2277 Change(dfs序+树状数组)
- FZU2277 Change dfs序+树状数组 区间更新 单点求值
- 第八届福建省大学生程序设计竞赛-重现赛(F Problem 2277 Change)DFS序+树状数组
- dfs序+树状数组
- 第八届福建省大学生程序设计竞赛 FZU 2277 Change (dfs序+树状数组)
- BZOJ2819 Nim(dfs序+树状数组)
- 【Codevs1228】苹果树(dfs序+树状数组)
- zzulioj 1916 (DFS序 树状数组)
- zzuliOJ1916:树(DFS序 + 树状数组)
- poj 3321(dfs序&&树状数组)
- bzoj 1103(DFS序+树状数组)
- hdu5877 dfs序+树状数组
- POJ3321 dfs序+树状数组
- POJ3321(dfs序+树状数组)
- POJ Apple Tree (树状数组 + dfs序)
- POJ 3321 Apple Tree(dfs序 + 树状数组)
- HDU 3887 Counting Offspring(dfs序+树状数组)
- HDU 5296 Annoying problem (树状数组+dfs序+倍增)
- angularjs变量的复制
- 微信小程序图片上传删除和预览
- jquery 时间戳转换日期格式
- JAVA使用堆外内存导致swap飙高
- java基础语法(顺便回顾cpp语法并比较与java的异同)
- FZU2277 Change(dfs序+树状数组)
- SIFT+BOW 实现图像检索
- IOS详解深拷贝和浅拷贝的概念、具体的使用以及对于容器类(NSArray,NSDictionary 等)和非容器类(NSString,NSdata 等)拷贝的差异
- 2017百度之星复赛:1006. Valley Numer(数位DP)
- 【整理】SIMD、MMX、SSE、AVX、3D Now!、neon——指令集大全
- 从头开始建立网站一
- Vue-webpack项目配置详解
- 在AS中的Termianl中使用git命令行管理git,提示不是‘git’不是内部或外部命令的解决办法
- linux VIM编辑器