| 记录编号 | 
        600495 | 
        评测结果 | 
        WWWWWWWEEE | 
    
    
        | 题目名称 | 
        4140.终末鸟 | 
        最终得分 | 
        0 | 
            
    
    
        | 用户昵称 | 
         会挽弯弓满月 | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        1.328 s  | 
    
    
        | 提交时间 | 
        2025-05-05 15:12:28 | 
        内存使用 | 
        13.58 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
ll n,q;
vector<ll> a[N];
bool c[N];
bool vis[N];
void dfs(ll p){
	ll u;
	for(ll i=0;i<a[p].size();i++){
		u=a[p][i];
		if(vis[u]) continue;
		if(!c[u]) continue;
		vis[u]=1;
		dfs(u);
	}
	return;
}
ll find(){
	ll ans=0;
	for(ll i=1;i<=n;i++) {
		if(!c[i]) continue;
		if(!vis[i]){
			dfs(i);
			ans++;
		}
	}
	return ans;
}
ll block;
ll solve(ll p){
	ll newn,v;
	if(c[p]==0){
		c[p]=1;
		newn=1; 
		for(ll i=0;i<a[p].size();i++){
			v=a[p][i];
			if(c[v]==1) newn--;
		}
	}
	else{
		c[p]=0;
		newn=-1;
		for(ll i=0;i<a[p].size();i++){
			v=a[p][i];
			if(c[v]==1) newn++;
		}
	}
	return newn;
}
int main(){
	freopen("birds.in","r",stdin);
	freopen("birds.out","w",stdout);
	n=read();
	ll u,v;
	for(int i=1;i<n;i++){
		u=read();v=read();
		a[u].push_back(v);
		a[v].push_back(u);
	}
	for(int i;i<=n;i++){
		c[i]=read();
	}
	block=find();
	printf("%lld\n",block);
	q=read();
	for(int i=1;i<=q;i++){
		u=read();
		block+=solve(u);
		printf("%lld\n",block);
	}
	return 0;
}