BZOJ1103【树状数组】
2015-04-07 20:19
295 查看
运用树的dfs序的性质差分.据说要写人工栈.
/* I will wait for you */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<iostream> #include<fstream> #include<vector> #include<queue> #include<deque> #include<set> #include<map> #include<string> #define make make_pair #define fi first #define se second using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII; const int maxn=250010; const int maxm=1010; const int maxs=26; const int INF=1<<29; const int P=1000000007; const double error=1e-9; struct edge{ int v,next; }e[2*maxn]; int cnt,clo,m,n,s[2*maxn],head[2*maxn],size[maxn],deep[maxn],su[maxn],q[maxn],fa[maxn],vis[maxn]; void add(int u,int v) { e[cnt]=(edge){v,head[u]},head[u]=cnt++; e[cnt]=(edge){u,head[v]},head[v]=cnt++; } void ins(int x,int c) { for(;x<maxn;x+=x&(-x)) s[x]+=c; } int ask(int x) { int ans=0;for(;x;x-=x&(-x)) ans+=s[x];return ans; } void dfs() { int top=1;q[top]=1; while(top) { int u=q[top--],p=fa[u]; if(!vis[u]) { size[u]=vis[u]=1,su[u]=++clo,q[++top]=u; for(int i=head[u],v;i!=-1;i=e[i].next) if((v=e[i].v)!=p) deep[v]=deep[u]+1,fa[v]=u,q[++top]=v; } else { for(int i=head[u],v;i!=-1;i=e[i].next) if((v=e[i].v)!=p) size[u]+=size[v]; } } } int main() { scanf("%d",&n);memset(head,-1,sizeof(head)); for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),add(u,v); dfs(); for(int i=1;i<=n;i++) ins(su[i],deep[i]),ins(su[i]+1,-deep[i]); scanf("%d",&m); for(int i=1,u,v;i<n+m;i++) { char t[10];scanf("%s",s); if(s[0]=='W') scanf("%d",&u),printf("%d\n",ask(su[u])); if(s[0]=='A') { scanf("%d%d",&u,&v);if(deep[u]<deep[v]) swap(u,v); ins(su[u],-1),ins(su[u]+size[u],1); } } return 0; }
相关文章推荐
- [dfs序 树状数组] BZOJ 1103 [POI2007]大都市meg
- 树状数组【bzoj1103】: [POI2007]大都市meg
- 【dfs序】【树状数组】bzoj1103 [POI2007]大都市meg
- BZOJ 1103 POI 2007 大都市meg 树状数组
- 【BZOJ1103】[POI2007]大都市meg【树链剖分】【线段树】【或 树状数组 + dfs序】
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
- bzoj1103树状数组水题
- 树状数组 - BZOJ 1103 [POI2007]大都市
- [BZOJ1103][POI2007]大都市meg(树状数组维护树上差分)
- BZOJ 1103 [POI 2007] dfs序+树状数组 解题报告
- 【bzoj1227】【SDOI2009】【虔诚的墓主人】【组合数学+树状数组】
- [SDOI2009][BZOJ1878][前缀和][树状数组]HH的项链
- [BZOJ 1901][ZOJ 2112]Dynamic Rankings(树状数组套主席树、动态区间第k大值查询)
- [bzoj1452][树状数组]Count
- 【BZOJ】【P3670】【Noi2014】【动物园】【题解】【KMP+树状数组】
- bzoj1878 树状数组 要一点思考
- [BZOJ1878]SDOI2009HH的项链|树状数组
- bzoj4361 isn(树状数组优化DP)
- BZOJ3110[Zjoi2013]K大数查询(树状数组+整体二分)
- BZOJ 1452: [JSOI2009]Count 二维树状数组