社区讨论
蒟蒻树剖求调,未过样例
P2146[NOI2015] 软件包管理器参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo3ehql4
- 此快照首次捕获于
- 2023/10/24 05:19 2 年前
- 此快照最后确认于
- 2023/10/24 05:19 2 年前
CPP
#include<bits/stdc++.h>
#define N 1000086
using namespace std;
int deep[N],fa[N],Snum[N],son[N],name[N],top[N];
int beg[N],to[N],nex[N];
int mul[N*2],lazy[N*2];
int n,m,e,num,wt[N],w[N],res;
inline void add(int x,int y){
to[++e]=y;
nex[e]=beg[x];
beg[x]=e;
}
inline void dfs1(int x,int f){
deep[x]=deep[f]+1,fa[x]=f;
Snum[x]=1;
for(int i=beg[x],y;y=to[i],i;i=nex[i]){
if(y==f)continue;
dfs1(y,x);
Snum[x]+=Snum[y];
if(Snum[y]>Snum[son[x]])son[x]=y;
}
}
inline void dfs2(int x,int Top){
name[x]=++num;
wt[num]=w[x];
top[x]=Top;
if(!son[x])return ;
dfs2(son[x],Top);
for(int i=beg[x];i;i=nex[i]){
int y=to[i];
if(y==fa[x]||y==son[x])continue;
dfs2(y,y);
}
}
inline void build(int x,int l,int r){
int mid=l+r>>1;
if(l==r){
mul[x]=wt[l];
return ;
}
build(x<<1,l,mid);
build(x<<1|1,mid+1,r);
mul[x]=(mul[x<<1]+mul[x<<1|1]);
}
inline void pushdown(int x,int len) {
if(!lazy[x]) return;
lazy[x<<1]+=lazy[x];
lazy[x<<1|1]+=lazy[x];
mul[x<<1]+=lazy[x]*(len-(len>>1));
mul[x<<1|1]+=lazy[x]*(len>>1);
lazy[x]=0;
}
inline void UP(int x,int l,int r,int L,int R,int k) {
int mid=l+r>>1;
if(L<=l&&r<=R) {
lazy[x]=k;
mul[x]=k*(r-l+1);
}
else {
if(lazy[x])pushdown(x,r-l+1);
if(L<=mid)UP(x<<1,l,mid,L,R,k);
if(R>mid)UP(x<<1|1,mid+1,r,L,R,k);
mul[x]=(mul[x<<1]+mul[x<<1|1]);
}
}
inline void up(int x,int y,int k) {
while(top[x]!=top[y]) {
if(deep[top[x]]<deep[top[y]])swap(x,y);
UP(0,0,n-1,name[top[x]],name[x],k);
x=fa[top[x]];
}
if(deep[x]>deep[y])swap(x,y);
UP(0,0,n-1,name[x],name[y],k);
return ;
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x;
cin>>x;
add(i,x);
add(x,i);
}
dfs1(0,0);
dfs2(0,0);
build(0,0,n-1);
cin>>m;
while(m--){
string s;
int x;
cin>>s>>x;
int a=mul[0];
// cout<<mul[0]<<" ";
if(s[0]='i')up(0,x,1);
else UP(0,0,n-1,name[x],name[x]+Snum[x]-1,0);
// cout<<mul[0]<<" ";
int b=mul[0];
cout<<abs(b-a)<<'\n';
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...