fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. const ll MAXN=5e5;
  4. using namespace std;
  5. ll n,q,tin[MAXN+5],tout[MAXN+5],cur=0,par[MAXN+5];
  6. vector<ll> adj[MAXN+5];
  7. void dfs(ll u){
  8. tin[u]=++cur;
  9. for(ll v:adj[u]){
  10. if(v==par[u]) continue;
  11. par[v]=u;
  12. dfs(v);
  13. }
  14. tout[u]=cur;
  15. }
  16. ll t[4*MAXN+5],lazy[4*MAXN+5];
  17. void push(ll v,ll l,ll r){
  18. if(lazy[v]==1e18) return;
  19. ll m=(l+r)/2;
  20. t[2*v]=(m-l+1)*lazy[v];
  21. lazy[2*v]=lazy[v];
  22. t[2*v+1]=(r-m)*lazy[v];
  23. lazy[2*v+1]=lazy[v];
  24. lazy[v]=1e18;
  25. }
  26. void update(ll v,ll tl,ll tr,ll l,ll r,ll val){
  27. if(l>r || l==0) return;
  28. if(tl==l && tr==r){
  29. t[v]=(r-l+1)*val;
  30. lazy[v]=val;
  31. }
  32. else{
  33. push(v,tl,tr);
  34. ll tm=(tl+tr)/2;
  35. update(2*v,tl,tm,l,min(r,tm),val);
  36. update(2*v+1,tm+1,tr,max(l,tm+1),r,val);
  37. t[v]=t[2*v]+t[2*v+1];
  38. }
  39. }
  40. ll query(ll v,ll tl,ll tr,ll l,ll r){
  41. if(l>r) return 0;
  42. if(tl==l && tr==r) return t[v];
  43. else{
  44. push(v,tl,tr);
  45. ll tm=(tl+tr)/2;
  46. return query(2*v,tl,tm,l,min(r,tm))+query(2*v+1,tm+1,tr,max(l,tm+1),r);
  47. }
  48. }
  49. int main(){
  50. ios_base::sync_with_stdio(0);cin.tie(0);
  51. if(fopen("skibidi.inp","r")){
  52. freopen("skibidi.inp","r",stdin);
  53. freopen("skibidi.out","w",stdout);
  54. }
  55. cin>>n;
  56. for(int i=1;i<n;i++){
  57. ll u,v;
  58. cin>>u>>v;
  59. adj[u].push_back(v);
  60. adj[v].push_back(u);
  61. }
  62. dfs(1);
  63. for(int i=0;i<=4*MAXN;i++) lazy[i]=1e18;
  64. cin>>q;
  65. while(q--){
  66. ll type,u;
  67. cin>>type>>u;
  68. if(type==1){
  69. ll sum=query(1,1,n,tin[u],tout[u]);
  70. if(sum!=(tout[u]-tin[u]+1)) update(1,1,n,tin[par[u]],tin[par[u]],0);
  71. update(1,1,n,tin[u],tout[u],1);
  72. }
  73. else if(type==2){
  74. update(1,1,n,tin[u],tin[u],0);
  75. }
  76. else{
  77. ll sum=query(1,1,n,tin[u],tout[u]);
  78. if(sum!=(tout[u]-tin[u]+1)) cout<<0;
  79. else cout<<1;
  80. cout<<'\n';
  81. }
  82. }
  83. return 0;
  84. }
  85.  
Success #stdin #stdout 0.01s 37440KB
stdin
Standard input is empty
stdout
Standard output is empty