BZOJ 1103
来源:互联网 发布:魔兽世界幻化软件 编辑:程序博客网 时间:2024/06/05 12:39
树状数组+DFS序
#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define MAXN 500500#define lowbit(x) (x&(-x))using namespace std;int n,m;int c[2*MAXN];struct node{ int from, to, next;}edge[MAXN*2];int q[MAXN*2];int top,tot;inline int read(){ int x=0;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x;}int head[MAXN*2],cnt;int l[MAXN*2],r[MAXN*2],fa[2*MAXN];void add(int x,int y){ edge[++cnt].from=x; edge[cnt].to=y; edge[cnt].next=head[x]; head[x]=cnt;}void dfs(int x){ q[++top]=x; while(top) { int now=q[top],f=fa[top--]; if (!l[now]) { l[now]=++tot; q[++top]=now; for (int i=head[now];i;i=edge[i].next) { if (edge[i].to==f) continue; fa[++top]=now; q[top]=edge[i].to; } } else r[now]=++tot; } return ;}int query(int x){ int sum=0; for (int i=x;i;i-=lowbit(i)) { sum+=c[i]; } return sum;}void update(int x,int delta){ for (int i=x;i<=2*n;i+=lowbit(i)) { c[i]+=delta; } return ;}int main(){ n=read(); for (int i=1;i<n;i++) { int x,y; x=read();y=read(); add(x,y);add(y,x); } dfs(1); for (int i=1;i<=n;i++) { update(l[i],1);update(r[i],-1); } int mark=0; m=read(); while (mark<m) { char ch[5]; scanf("%s",ch); if (ch[0]=='A') { int x,y; x=read(),y=read(); update(l[y],-1); update(r[y],1); } else { int x; x=read(); mark++; printf("%d\n",query(l[x])-1); } } return 0;}
阅读全文
0 0
- BZOJ 1103
- BZOJ 1103
- bzoj 1103 bzoj [POI2007]大都市meg
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- BZOJ
- 网络获取数据ok+泛型+绑定解绑+观察者+被观察者
- pthread_mutex_t死锁
- 《Python学习手册》学习笔记(20)之第20章迭代和解析,第二部分(关键词:编程语言/Python/迭代/解析)
- 前端html学习记录
- Caffe normalization层实现
- BZOJ 1103
- [bzoj2563][贪心]阿狸和桃子的游戏
- input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。
- poj 3422 Kaka's Matrix Travels(最小费用流)
- ping 与 防火墙
- canvas 文字api
- R语言的plyr包简介
- Oracle控制台调整表线宽列宽页面大小
- 对拍代码