Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这不科学!E[110000][10]就RE,开100就过了……难道有几十个分支?#include<cstdio> #include<cstring> #include<cstdlib> #include<vector> #include<algorithm> using namespace std; int E[120000][100],C[120000]; int n,m,a,b,cnt; int l[120000],r[120000],fa[120000]; int tr[120000]; bool pcked[120000]; int lbt(int a) {return a&(-a); } void dfs(int k) { l[k]=++cnt; for(int i=1;i<=C[k];i++) { if(E[k][i]!=fa[k]) { fa[E[k][i]]=k; dfs(E[k][i]); } } r[k]=cnt; } int s(int x) { int rtn=0; while(x>0) { rtn+=tr[x]; x-=lbt(x); } return rtn; } void init() { for(int i=1;i<=n;i++) tr[i]=lbt(i); } void ad(int x,int d) { while(x<=n) { tr[x]+=d; x+=lbt(x); } } int main() { scanf("%d",&n); for(int i=1;i<n;i++) { scanf("%d%d",&a,&b); C[a]++;C[b]++; E[a][C[a]]=b; E[b][C[b]]=a; } dfs(1); init(); scanf("%d",&m); char op[10];int x; for(int i=1;i<=m;i++) { scanf("%s",&op); scanf("%d",&x); if(op[0]=='Q') printf("%d\n",s(r[x])-s(l[x]-1)); else if(op[0]=='C') { if(pcked[x])ad(l[x],1);else ad(l[x],-1); pcked[x]=!pcked[x]; } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator