poj3321-dfs序&树状数组&dfs序模板题-Apple Tree
2017-11-06 20:12
555 查看
开始用getsum()-getsum()当作单点查询竟然tle了。。
于是乎 我用了一个计数器。
和上一道题一摸一样。真的是模板题啊 亲们qwq
就对着照了上一道题改了一下下
一棵树上每个点上挂一个苹果
下列操作:① 查询以x为根的子树上有多少个苹果(裸的我tm)
② 对苹果的数量进行取反(如果有变成没有,没有变成有)
于是乎 我用了一个计数器。
和上一道题一摸一样。真的是模板题啊 亲们qwq
就对着照了上一道题改了一下下
一棵树上每个点上挂一个苹果
下列操作:① 查询以x为根的子树上有多少个苹果(裸的我tm)
② 对苹果的数量进行取反(如果有变成没有,没有变成有)
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; /* 体现题意的地方,就在于在树状数组中的结果。 */ const int maxn=1e5+100; struct Node{ int to,next; }node[maxn*2]; int head[maxn]; int sta[maxn]; int end1[maxn]; int ans[maxn]; int sum[maxn]; int che[maxn]; int len; void addedge(int a,int b){ node[len].to=b; node[len].next=head[a]; head[a]=len++; } int tim; void init(){ tim=0; len=0; memset(head,-1,sizeof(head)); memset(sta,0,sizeof(sta)); memset(sum,0,sizeof(sum)); memset(che,0,sizeof(che)); } void dfs(int s,int pre){ sta[s]=++tim; for(int i=head[s];i!=-1;i=node[i].next){ int to=node[i].to; if(to==pre) continue; dfs(to,s); } end1[s]=tim; } int lowbit(int a){ return a&(-a); } void add(int s,int va){ for(int i=s;i<maxn;i+=lowbit(i)) sum[i]+=va; } int getsum(int s){ int all=0; while(s>0){ all+=sum[s]; s-=lowbit(s); } return all; } int main() { int m,n,a,b; while(~scanf("%d",&m)){ if(!m)break; init(); for(int i=0;i<m-1;i++){ scanf("%d%d",&a,&b); addedge(a,b); addedge(b,a); } dfs(1,-1); scanf("%d",&n); char ch; for(int i=1;i<=m;i++){ add(sta[i],1); } int nu; for(int i=1;i<=n;i++){ scanf(" %c",&ch); if(ch=='Q') { scanf("%d",&nu); int ans=getsum(end1[nu])-getsum(sta[nu]-1); printf("%d\n",ans); } else{ scanf("%d",&nu); if(che[nu]%2==0){ che[nu]++; add(sta[nu],-1); } else{ che[nu]++; add(sta[nu],1); } } } printf("\n"); } return 0; }
相关文章推荐
- Apple Tree_poj3321_树状数组&dfs
- 【poj3321】Apple Tree——树状数组&DFS
- poj3321 Apple Tree(DFS+树状数组)
- 【POJ3321】Apple Tree(DFS序,树状数组)
- POJ3321 Apple Tree(DFS序 + 树状数组)
- [poj3321]Apple Tree_dfs序_树状数组
- POJ3321 Apple Tree(树状数组 + dfs + 线性表)
- 【POJ3321】Apple Tree-DFS+树状数组维护
- Poj3321 Apple Tree【DFS序】【树状数组】
- POJ3321 Apple Tree(DFS序)
- 【树状数组--dfs序转化】poj3321 Apple Tree
- [dfs序][线段树][模板]hdu5692 Snacks
- poj3321 Apple Tree
- 模板:HDU 1242: Rescue: (BFS DFS)
- Apple Tree(POJ3321)(树状数组)
- Round Numbers(数位dp+dfs+记忆化模板)
- 2-SAT暴力dfs模板解释|不看你会后悔的
- [jzoj1016][poj3321]苹果树(dfs序+树状数组维护)
- POJ3321 Apple Tree
- POJ2488 ——Dfs基础算法模板