| 比赛 | 
    2025.5.5 | 
    评测结果 | 
    WWTTTTTEEE | 
    | 题目名称 | 
    终末鸟 | 
    最终得分 | 
    0 | 
    | 用户昵称 | 
    123 | 
    运行时间 | 
    69.902 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    78.10 MiB  | 
    | 提交时间 | 
    2025-05-05 11:46:43 | 
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int n,a[N],idx[N],nxt[N],head[N],tot=0,q,vis[N],ret=0;
void add(int x,int y)
{
	idx[++tot]=y;
	nxt[tot]=head[x];
	head[x]=tot;
}
void dfs(int now)
{
	vis[now]=1;
	for (int i=head[now];i;i=nxt[i])
	{
		int y=idx[i];
		if (a[y]==1 && vis[y]==0)
		{
			dfs(y);
		}
	}
}
int main() {
	freopen("birds.in","r",stdin);
	freopen("birds.out","w",stdout); 
	cin>>n;
	for (int i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
	} 
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	cin>>q;
	for (int i=1;i<=n;i++)
	{
		if (!vis[i] && a[i]==1)
		{
			ret++;
			dfs(i);
		}
	}
	while (q--)
	{
		int x;
		scanf("%d",&x);
		a[x]=1-a[x];
		memset(vis,0,sizeof(vis));
		ret=0;
		for (int i=1;i<=n;i++)
		{
			if (!vis[i] && a[i]==1)
			{
				ret++;
				dfs(i);
			}
		}
		printf("%d\n",ret);
	}
}