卸载:把子树清空;

安装:把自己到$1$的链改为$1$

#include<cstdio>
#include<iostream>
#include<cstring>
#define R register int
#define ls (tr<<1)
#define rs (tr<<1|1)
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
} const int N=;
int n,m,cnt,num;
int vr[N<<],nxt[N<<],fir[N],sz[N],top[N],dfn[N],pre[N],d[N],son[N],sum[N<<],tg[N<<];
inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;}
inline void dfs1(int u) { sz[u]=; R mx=;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(!d[v]) {
d[v]=d[u]+; dfs1(v); sz[u]+=sz[v];
if(sz[v]>mx) son[u]=v,mx=sz[v];
}
}
}
inline void dfs2(int u,int tp) {
top[u]=tp; dfn[u]=++num;
if(son[u]) dfs2(son[u],tp);
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v!=pre[u]&&v!=son[u]) dfs2(v,v);
}
}
inline void spread(int tr,int l,int r) { if(~tg[tr]) {
R md=l+r>>;
tg[ls]=tg[tr],sum[ls]=(md-l+)*tg[tr];
tg[rs]=tg[tr],sum[rs]=(r-md)*tg[tr]; tg[tr]=-;
}
}
inline void update(int tr,int l,int r,int LL,int RR,int d) {
if(LL<=l&&r<=RR) {tg[tr]=d,sum[tr]=(r-l+)*d; return ;} spread(tr,l,r); R md=l+r>>;
if(LL<=md) update(ls,l,md,LL,RR,d); if(RR>md) update(rs,md+,r,LL,RR,d);
sum[tr]=sum[ls]+sum[rs];
}
inline void change(int u,int inc) {
while(top[u]!=) {
update(,,n,dfn[top[u]],dfn[u],inc);
u=pre[top[u]];
} update(,,n,,dfn[u],inc);
}
signed main() { memset(tg,0xff,sizeof(tg));
n=g(); for(R i=,u;i<=n;++i) u=g()+,add(u,i),add(i,u),pre[i]=u;
d[]=,dfs1(); dfs2(,); m=g();
for(R i=,x;i<=m;++i) { register char ch; while(!isalpha(ch=getchar()));
R tmp=sum[]; x=g()+;
if(ch=='i') change(x,),printf("%d\n",sum[]-tmp);
else if(ch=='u') {
update(,,n,dfn[x],dfn[x]+sz[x]-,);
printf("%d\n",tmp-sum[]);
}
}
}

2019.07.03

最新文章

  1. Jquery ajax运用执行顺序有误怎么解决
  2. Android 7.0 UICC 分析(四)
  3. ubuntu添加环境变量【原创】
  4. iOS XMPP(1)
  5. JavaScript---网络编程(3)-Object、String、Array对象和prototype属性
  6. 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader
  7. struts1,struts2,hibernate,spring的运行原理结构图
  8. 在Linux上搭建测试环境常用命令(转自-测试小柚子)
  9. html总结:float实现span和input输入框同行
  10. 安全:CSRF
  11. 【机器学习】 Matlab 2015a 自带机器学习算法汇总
  12. Angular 4 路由介绍
  13. Windows里如何正确安装Zookeeper以服务运行(博主推荐)(图文详解)
  14. python第十四课--排序及自定义函数之自定义函数(案例一)
  15. AtCoder | ARC102 | 瞎讲报告
  16. 手工配置oracle数据库
  17. Ngnix常用的操作
  18. Oracle练习笔记
  19. onblur &amp; onchange
  20. AC日记——「SCOI2015」情报传递 LiBreOJ 2011

热门文章

  1. LeetCode 第 165 场周赛
  2. SpringCloud 教程 | 终章
  3. S02_CH09_UART串口中断实验
  4. Prometheus Operator 自动发现和持久化
  5. command not found 的解决&amp;&amp;解释
  6. Python Socket套接字编程
  7. Codeforces 1247F. Tree Factory
  8. 记笔记的软件(vnote)
  9. 逆向知识第九讲,switch case语句在汇编中表达的方式
  10. WebStorm使用码云插件问题