码迷,mamicode.com
首页 > 其他好文 > 详细

树标号

时间:2014-07-31 12:20:36      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

Apple Tree http://poj.org/problem?id=3321

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 #define mt(a,b) memset(a,b,sizeof(a))
 4 #define lrrt int L,int R,int rt
 5 #define iall 1,n,1
 6 #define imid int mid=(L+R)>>1
 7 #define lson L,mid,rt<<1
 8 #define rson mid+1,R,rt<<1|1
 9 using namespace std;
10 const int M=100010;
11 int tree[M<<2];
12 void pushup(int rt){
13     tree[rt]=tree[rt<<1]+tree[rt<<1|1];
14 }
15 void build(lrrt){
16     if(L==R){
17         tree[rt]=1;
18         return ;
19     }
20     imid;
21     build(lson);
22     build(rson);
23     pushup(rt);
24 }
25 void update(int x,lrrt){
26     if(L==R){
27         tree[rt]^=1;
28         return ;
29     }
30     imid;
31     if(mid>=x) update(x,lson);
32     else       update(x,rson);
33     pushup(rt);
34 }
35 int query(int x,int y,lrrt){
36     if(x<=L&&R<=y) return tree[rt];
37     imid;
38     int ans=0;
39     if(mid>=x) ans+=query(x,y,lson);
40     if(mid<y)  ans+=query(x,y,rson);
41     return ans;
42 }
43 struct G{
44     struct E{
45         int u,v,next;
46     }e[M<<1];
47     int le,head[M];
48     void init(){
49         le=0;
50         mt(head,-1);
51     }
52     void add(int u,int v){
53         e[le].u=u;
54         e[le].v=v;
55         e[le].next=head[u];
56         head[u]=le++;
57     }
58 }g;
59 struct Node{
60     int l,r;
61 }node[M];
62 int Index;
63 void dfs(int u,int fa){
64     node[u].l=++Index;
65     for(int i=g.head[u];~i;i=g.e[i].next){
66         int v=g.e[i].v;
67         if(v!=fa){
68             dfs(v,u);
69         }
70     }
71     node[u].r=Index;
72 }
73 int main(){
74     int n,m;
75     while(~scanf("%d",&n)){
76         g.init();
77         for(int i=0,u,v;i<n-1;i++){
78             scanf("%d%d",&u,&v);
79             g.add(u,v);
80             g.add(v,u);
81         }
82         build(iall);
83         Index=0;
84         dfs(1,-1);
85         scanf("%d",&m);
86         while(m--){
87             char op[4];
88             int x;
89             scanf("%s%d",op,&x);
90             if(op[0]==C){
91                 update(node[x].l,iall);
92             }
93             else{
94                 printf("%d\n",query(node[x].l,node[x].r,iall));
95             }
96         }
97     }
98     return 0;
99 }
View Code

 

树标号,布布扣,bubuko.com

树标号

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/gaolzzxin/p/3880246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!