#include #include #include #include #include #define MAXN 500001 using namespace std; vector synowie[MAXN]; vector galezie[MAXN]; int ojciec[MAXN]; bitset odw; bitset strajk; void dfs(int x) { odw[x] = true; for(int i = 0; i < galezie[x].size(); i++) if(galezie[x][i] != ojciec[x]) synowie[x].push_back(galezie[x][i]); for(int i = 0; i < (int) synowie[x].size(); i++) if(!odw[synowie[x][i]]) { ojciec[synowie[x][i]] = x; dfs(synowie[x][i]); } } int main() { int n, x, y, m, pomoc_strajki; int wynik = 1; scanf("%d",&n); for(int i = 1; i < n; i++) { scanf("%d%d",&x,&y); galezie[x].push_back(y); galezie[y].push_back(x); } dfs(1); scanf("%d",&m); for(int i = 0; i < m; i++) { scanf("%d",&pomoc_strajki); if(pomoc_strajki > 0) strajk[pomoc_strajki].flip(); else strajk[pomoc_strajki * -1].flip(); if(pomoc_strajki > 0) { if(!strajk[ojciec[pomoc_strajki]]) wynik++; for(int j = 0; j < synowie[ojciec[pomoc_strajki]].size(); j++) if(synowie[ojciec[pomoc_strajki]][j] == pomoc_strajki) synowie[ojciec[pomoc_strajki]].erase(synowie[ojciec[pomoc_strajki]].begin()+j); wynik += synowie[pomoc_strajki].size(); wynik--; } if(pomoc_strajki < 0) { if(!strajk[ojciec[-1 * pomoc_strajki]]) wynik--; synowie[ojciec[-1 * pomoc_strajki]].push_back(-1 * pomoc_strajki); wynik -= synowie[-1 * pomoc_strajki].size(); wynik++; } printf("%d\n",wynik); } }