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

【BZOJ】【1103】【POI2007】大都市meg

时间:2015-01-24 12:54:21      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

dfs序

  模板题,进点+1出点-1,刚好对于不在路径上的点一进一出刚好抵消,由于本题要动态修改(变成公路以后+1-1都变成0)所以在序列上套一个树状数组即可。

TLE:1.递归dfs给爆了……写了个手动栈

     2.忘了删freopen……QAQ我的AC率啊……

技术分享
 1 /**************************************************************
 2     Problem: 1103
 3     User: Tunix
 4     Language: C++
 5     Result: Accepted
 6     Time:3884 ms
 7     Memory:10060 kb
 8 ****************************************************************/
 9  
10 //BZOJ 1103
11 #include<cstdio>
12 #include<cstring>
13 #include<cstdlib>
14 #include<iostream>
15 #include<algorithm>
16 #define rep(i,n) for(int i=0;i<n;++i)
17 #define F(i,j,n) for(int i=j;i<=n;++i)
18 #define D(i,j,n) for(int i=j;i>=n;--i)
19 #define pb push_back
20 using namespace std;
21 void read(int &v){
22     v=0; int sign=1; char ch=getchar();
23     while(ch<0||ch>9){ if (ch==-) sign=-1; ch=getchar();}
24     while(ch>=0&&ch<=9){ v=v*10+ch-0; ch=getchar();}
25     v*=sign;
26 }
27 #define debug
28 /******************tamplate*********************/
29 const int N=250010;
30 int head[N],to[N],next[N],cnt;
31 void add(int x,int y){
32     to[++cnt]=y; next[cnt]=head[x]; head[x]=cnt;
33 }
34 /********************edge**********************/
35 int n,m,dfs_clock,t[N*2],l[N],r[N];
36 inline int lowbit(int x){return x&(-x);}
37 void update(int x,int val){
38     for(int i=x;i<=n*2;i+=lowbit(i))
39         t[i]+=val;
40 }
41 int sum(int x){
42     int temp=0;
43 //  for(int i=1;i<=x;++i) temp+=t[i];
44     for(int i=x;i;i-=lowbit(i)) temp+=t[i];
45     return temp;
46 }
47 int fa[N],st[N],top=0;
48 void dfs(){
49     st[++top]=1;
50     while(top){
51         int x=st[top];
52         if (!l[x]){
53             l[x]=++dfs_clock;
54             for(int i=head[x];i;i=next[i])
55                 st[++top]=to[i];
56         }
57         else{
58             r[x]=++dfs_clock;
59             top--;
60         }
61     }
62 }
63 int main(){
64     read(n);
65     int x,y;
66     F(i,2,n){
67         read(x); read(y);
68         add(x,y);
69     }
70     dfs();
71     memset(t,0,sizeof t);
72     F(i,2,n) {update(l[i],1); update(r[i],-1);}
73     char cmd[3];
74     read(m);
75     F(i,1,n+m-1){
76         scanf("%s",cmd);
77         if (cmd[0]==A){
78             read(x); read(y);
79             update(l[y],-1) ;update(r[y],1);
80         }
81         else{
82             read(x);
83             printf("%d\n",sum(l[x]));
84         }
85     }
86     return 0;
87 }
View Code

 

【BZOJ】【1103】【POI2007】大都市meg

标签:

原文地址:http://www.cnblogs.com/Tunix/p/4245707.html

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