[jzoj1016][poj3321]苹果树(dfs序+树状数组维护)
2017-10-09 18:32
495 查看
传送门
这个题是树链剖分简化版,甚至都没有链,只需要dfs一遍搞出来dfs序,然后搞个每个节点对于dfs序上的映射就好了,然后单点修改,区间查询,树状数组维护即可。
代码:
这个题是树链剖分简化版,甚至都没有链,只需要dfs一遍搞出来dfs序,然后搞个每个节点对于dfs序上的映射就好了,然后单点修改,区间查询,树状数组维护即可。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<cstdlib> #define ll long long using namespace std; inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f; } struct edge{ int to,next; }e[200001]; int n,m,tot; int head[100001]; inline void addedge(int x,int y){ e[++tot].to=y;e[tot].next=head[x];head[x]=tot; } int dfn[100001]; int mp[100001]; int v[100001]; int t[100001]; int size[100001]; void dfs(int x,int fa){ dfn[++tot]=x; mp[x]=tot; size[x]=1; for(int i=head[x];i;i=e[i].next){ int u=e[i].to; if(u==fa)continue; dfs(u,x); size[x]+=size[u]; } } inline int lowbit(int x){ return x&-x; } inline void update(int x){ int cg; if(v[x])cg=-1; else cg=1; v[x]+=cg; while(x<=n){ t[x]+=cg; x+=lowbit(x); } } inline int query(int x){ int sum=0; while(x){ sum+=t[x]; x-=lowbit(x); } return sum; } int main(){ n=read(); for(int i=1;i<n;i++){ int x=read(),y=read(); addedge(x,y);addedge(y,x); } tot=0; dfs(1,0); for(int i=1;i<=n;i++){ update(i); } m=read(); for(int i=1;i<=m;i++){ char ch[3]; scanf("%s",ch); int x=read(); if(ch[0]=='C'){ update(mp[x]); } else{ printf("%d\n",query(mp[x]+size[x]-1)-query(mp[x]-1)); } } return 0; }
相关文章推荐
- 【POJ3321】Apple Tree-DFS+树状数组维护
- [POJ3321] Apple Tree 苹果树 - 树状数组
- 【POJ3321】Apple Tree(DFS序,树状数组)
- JZOJ4753【GDOI2017模拟9.4】种树 LCT维护子树信息+换根时维护Dfs序(CC MONOPLOY加强版)
- [poj3321]Apple Tree_dfs序_树状数组
- JZOJ 1016. 【PKU3321】苹果树
- 【Codevs1228】苹果树(dfs序+树状数组)
- POJ3321 Apple Tree(DFS序 + 树状数组)
- POJ3321(dfs序列+树状数组)
- (POJ3321)Apple Tree <dfs序列 树状数组>
- BZOJ1103 大都市 DFS序 树状数组维护差分数组
- [CSU - 1811 (湖南省赛16)] Tree Intersection (dfs序维护子树+离线询问+树状数组)
- poj3321 Apple Tree(DFS+树状数组)
- HDU-1016 Prime Ring Problem (DFS)
- HDU 1016 Prime Ring Problem (dfs)
- poj 3321 dfs + 树状数组
- JZOJ4769 【GDOI2017模拟9.9】graph CDQ分治+用按秩合并维护带撤销的并查集(BZOJ 4025)
- 【jzoj3886】【道路维护】【并查集】
- HDU 1016 素数环(DFS)
- Codeforces Round #425 (Div. 2) D 树链剖分 + 树状数组维护区间