记录编号 600499 评测结果 AAAAAAATTT
题目名称 终末鸟 最终得分 70
用户昵称 Gravatar彭欣越 是否通过 未通过
代码语言 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;
}