Facebook
From Scorching Prairie Dog, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 214
  1. #include <bits/stdc++.h>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <iostream>
  6. #define MAXN 500001
  7.  
  8. using namespace std;
  9.  
  10. vector <int> synowie[MAXN];
  11. int synowieon[MAXN];
  12. vector <int> galezie[MAXN];
  13. int ojciec[MAXN];
  14. bitset <MAXN> odw;
  15. bitset <MAXN> strajk;
  16.  
  17. void dfs(int x)
  18. {
  19.     odw[x] = true;
  20.  
  21.     for(int i = 0; i < galezie[x].size(); i++)
  22.             if(galezie[x][i] != ojciec[x])
  23.             {
  24.                 synowie[x].push_back(galezie[x][i]);
  25.                 synowieon[x]++;
  26.             }
  27.  
  28.     for(int i = 0; i < (int) synowie[x].size(); i++)
  29.         if(!odw[synowie[x][i]])
  30.         {
  31.             ojciec[synowie[x][i]] = x;
  32.             dfs(synowie[x][i]);
  33.         }
  34. }
  35.  
  36. int main()
  37. {
  38.     int n, x, y, m, pomoc_strajki;
  39.     int wynik = 1;
  40.  
  41.     scanf("%d",&n);
  42.  
  43.     for(int i = 1; i < n; i++)
  44.     {
  45.         scanf("%d%d",&x,&y);
  46.  
  47.         galezie[x].push_back(y);
  48.         galezie[y].push_back(x);
  49.     }
  50.  
  51.     dfs(1);
  52.  
  53.     scanf("%d",&m);
  54.  
  55.     /*for(int i = 0; i < m; i++)
  56.     {
  57.         scanf("%d",&pomoc_strajki);
  58.         if(pomoc_strajki > 0) strajk[pomoc_strajki].flip();
  59.             else strajk[pomoc_strajki * -1].flip();
  60.  
  61.         if(pomoc_strajki > 0)
  62.         {
  63.             if(!strajk[ojciec[pomoc_strajki]]) wynik++;
  64.  
  65.             for(int j = 0; j < synowie[ojciec[pomoc_strajki]].size(); j++)
  66.                 if(synowie[ojciec[pomoc_strajki]][j] == pomoc_strajki)
  67.                     synowie[ojciec[pomoc_strajki]].erase(synowie[ojciec[pomoc_strajki]].begin()+i);
  68.  
  69.             wynik += synowie[pomoc_strajki].size();
  70.  
  71.             wynik--;
  72.         }
  73.  
  74.         if(pomoc_strajki < 0)
  75.         {
  76.             if(!strajk[ojciec[-1 * pomoc_strajki]]) wynik--;
  77.  
  78.             synowie[ojciec[-1 * pomoc_strajki]].push_back(-1 * pomoc_strajki);
  79.  
  80.             wynik -= synowie[pomoc_strajki].size();
  81.  
  82.             wynik++;
  83.         }
  84.  
  85.         printf("%d\n",wynik);
  86.     }*/
  87.  
  88.     for(int i = 0; i < m; i++)
  89.     {
  90.         scanf("%d",&pomoc_strajki);
  91.         if(pomoc_strajki > 0) strajk[pomoc_strajki].flip();
  92.             else strajk[pomoc_strajki * -1].flip();
  93.  
  94.         if(pomoc_strajki > 0)
  95.         {
  96.             if(!strajk[ojciec[pomoc_strajki]]) wynik++;
  97.  
  98.             synowieon[ojciec[pomoc_strajki]]--;
  99.  
  100.             wynik += synowieon[pomoc_strajki];
  101.  
  102.             wynik--;
  103.         }
  104.  
  105.         if(pomoc_strajki < 0)
  106.         {
  107.             if(!strajk[ojciec[-1 * pomoc_strajki]]) wynik--;
  108.  
  109.             synowieon[ojciec[-1 * pomoc_strajki]]++;
  110.  
  111.             wynik -= synowieon[-1 * pomoc_strajki];
  112.  
  113.             wynik++;
  114.         }
  115.  
  116.         printf("%d\n",wynik);
  117.     }
  118. }