| 记录编号 | 
        600499 | 
        评测结果 | 
        AAAAAAATTT | 
    
    
        | 题目名称 | 
        4140.终末鸟 | 
        最终得分 | 
        70 | 
            
    
    
        | 用户昵称 | 
         彭欣越 | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        33.791 s  | 
    
    
        | 提交时间 | 
        2025-05-05 15:16:19 | 
        内存使用 | 
        86.09 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include <bits/stdc++.h>
using namespace std;
const int N=10000010;
int n,q,a[N],mk[N],ans;
int head[N],tot;
struct edge {
	int v,nxt;
}e[N*2];
void add (int u,int v) {
	e[++tot].v=v;
	e[tot].nxt=head[u];
	head[u]=tot;
}
void dfs (int u) {
	for (int i=head[u];i;i=e[i].nxt) {
		int v=e[i].v;
		if (mk[v]||!a[v]) continue;
		mk[v]=1;
		dfs(v);
	}
	return;
}
int main () {
	freopen("birds.in","r",stdin);
	freopen("birds.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n;
	for (int i=1;i<n;i++) {
		int x,y;
		cin >> x >> y;
		add(x,y);
		add(y,x);
	}
	for (int i=1;i<=n;i++) cin >> a[i];
	for (int i=1;i<=n;i++) {
		if (a[i]&&!mk[i]) {
			dfs(i); 
			ans++;
		}
	}
	cout << ans <<"\n";
	//ans=0;
	cin >> q;
	while (q--) {
		int x;
		cin >> x;
		if (a[x]==0) a[x]=1;
		else a[x]=0;
		int sum=0;
		for (int i=head[x];i;i=e[i].nxt) {
			int v=e[i].v;
			if (a[v]) sum++;
		}
		if (a[x]) {
			ans+=1-sum;
		}else{
			ans-=1-sum;
		}
		cout << ans <<"\n";
		//ans=0;
	}
	return 0;
}