Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.71 KB | None | 0 0
  1. ///বিসমিল্লাহির_রহমানির_রহীম
  2. #include<bits/stdc++.h>
  3. #define     pie                          acos(-1.0)
  4. #define     N                            2000015
  5. #define     eps                          1e-9
  6. #define     ff                           first
  7. #define     ss                           second
  8. #define     nl                           '\n'
  9. #define     mod                          1000000007
  10. #define     sp                           ' '
  11. #define     CLR(a)                       memset(a,0,sizeof(a))
  12. #define     SET(a)                       memset(a,-1,sizeof(a))
  13. #define     all(x)                       x.begin(),x.end()
  14. #define     allr(x)                      x.rbegin(),x.rend()
  15. #define     sz(x)                        (int)(x).size()
  16. #define     Fast_Read                    ios_base::sync_with_stdio(false); cin.tie(nullptr);  cout.tie(nullptr);
  17. #define     Precision(x)                 cout.setf(ios::fixed); cout.precision(x);
  18. #define     bug                          cout<<"debug"<<nl;
  19. using namespace std;
  20. int dx[]={0,0,1,-1,-1,-1,1,1};
  21. int dy[]={1,-1,0,0,-1,1,1,-1};
  22. typedef long long ll;
  23. typedef long double ld;
  24. typedef pair<int,int> pii;
  25. template < class T> inline T biton(T n,T pos){return n |((T)1<<pos);}
  26. template < class T> inline T bitoff(T n,T pos){return n & ~((T)1<<pos);}
  27. template < class T> inline T ison(T n,T pos){return (bool)(n & ((T)1<<pos));}
  28. template < class T> inline T gcd(T a, T b){while(b){a%=b;swap(a,b);}return a;}
  29. inline int nxt(){int aaa;scanf("%d",&aaa);return aaa;}
  30. inline ll lxt(){ll aaa;scanf("%lld",&aaa);return aaa;}
  31. inline double dxt(){double aaa;scanf("%lf",&aaa);return aaa;}
  32. template <class T> inline T bigmod(T p,T e,T m){T ret = 1;
  33. for(; e > 0; e >>= 1){
  34.     if(e & 1) ret = (ret * p) % m;p = (p * p) % m;
  35. } return (T)ret;}
  36. #ifdef obaydullah
  37.      #define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
  38.     template < typename Arg1 >
  39.     void __f(const char* name, Arg1&& arg1){
  40.         cerr << name << " is " << arg1 << std::endl;
  41.     }
  42.     template < typename Arg1, typename... Args>
  43.     void __f(const char* names, Arg1&& arg1, Args&&... args){
  44.         const char* comma = strchr(names+1, ',');
  45.         cerr.write(names, comma - names) << " is " << arg1 <<" | ";
  46.         __f(comma+1, args...);
  47.     }
  48. #else
  49.     #define debug(...)
  50. #endif
  51. ///******************************************START******************************************
  52. vector<int> adj[N];
  53. vector<int> order,FirstNode,orderIndex;
  54. void init(int n){
  55.     for(int i=0;i<=n+100;i++) adj[i].clear();
  56.     FirstNode.assign(n+100,-1);
  57.     orderIndex.assign(n+100,0);
  58.     order.clear();
  59.     order.push_back(-1);
  60. }
  61. void AddEdge(int u, int v){
  62.     adj[u].push_back(v);
  63.     adj[v].push_back(u);
  64. }
  65. void Sort(int n){
  66.     for(int i=0;i<n+100;i++){
  67.         sort(all(adj[i]));
  68.     }
  69. }
  70. void dfs(int node=1, int par=-1){
  71.  
  72.     for(auto it:adj[node]){
  73.  
  74.         if(it!=par){
  75.             dfs(it,node);
  76.             order.push_back(it);
  77.             if(adj[it].size()==1){
  78.                 if(FirstNode[node]==-1){
  79.                     FirstNode[node]=it;
  80.                 }
  81.                 FirstNode[it]=it;
  82.             }
  83.             else{
  84.                 if(FirstNode[node]==-1){
  85.                     FirstNode[node]=FirstNode[it];
  86.                 }
  87.             }
  88.         }
  89.     }
  90.  
  91. }
  92. int cs=0;
  93. void solve(){
  94.     int n=nxt();
  95.     init(n);
  96.  
  97.     for(int i=0;i<n-1;i++){
  98.         int u=nxt(),v=nxt();
  99.         AddEdge(u,v);
  100.     }
  101.     Sort(n);
  102.     dfs();
  103.     order.push_back(1);
  104.     if(n==1) FirstNode[1]=1;
  105.     for(int i=1;i<order.size();i++){
  106.         orderIndex[order[i]]=i;
  107.     }
  108.     set<int> st;
  109.     for(int i=1;i<=n;i++) st.insert(i);
  110.     int q=nxt();
  111.     printf("Case %d:\n",++cs);
  112.     while(q--){
  113.         int inn=nxt();
  114.         if(inn==1){
  115.             int u=nxt(),x=nxt();
  116.             int first=FirstNode[u];
  117.             int ind=orderIndex[first];
  118.             auto lt=st.lower_bound(ind);
  119.             for(int i=1; i<=x && lt!=st.end() && *lt<=orderIndex[u];  i++){
  120.                 st.erase(lt);
  121.                 lt = st.lower_bound(ind);
  122.             }
  123.         }else{
  124.             int u=nxt();
  125.             u=orderIndex[u];
  126.             if(st.find(u)!=st.end()) printf("0\n");
  127.             else printf("1\n");
  128.         }
  129.  
  130.     }
  131.  
  132. }
  133. int main()
  134. {
  135.     //Fast_Read
  136.     Precision(10)
  137. #ifdef obaydullah
  138.     double start_time = clock();
  139.     ///freopen ("output.txt","w",stdout);
  140.     ///freopen ("input.txt","r",stdin);
  141. #endif
  142.     int tc=nxt();
  143.     while(tc--)
  144.     {
  145.         solve();
  146.     }
  147. #ifdef obaydullah
  148.     double end_time = clock();
  149.     cerr<<"Time = "<<fixed<<setprecision(10)<<(end_time - start_time) / CLOCKS_PER_SEC<<'\n';
  150. #endif
  151.  
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement