比赛 |
2025.5.5 |
评测结果 |
WWWWWWWEEE |
题目名称 |
终末鸟 |
最终得分 |
0 |
用户昵称 |
会挽弯弓满月 |
运行时间 |
1.277 s |
代码语言 |
C++ |
内存使用 |
13.54 MiB |
提交时间 |
2025-05-05 10:34:55 |
显示代码纯文本
#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;
}