比赛 |
2025.5.5 |
评测结果 |
WWAAWWWWWW |
题目名称 |
终末鸟 |
最终得分 |
20 |
用户昵称 |
dream |
运行时间 |
12.416 s |
代码语言 |
C++ |
内存使用 |
31.35 MiB |
提交时间 |
2025-05-05 11:52:54 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=10000005,M=N*2;
int n,q;
int fa[N],b[N],ez[N],ans;
void read(int &x){
int sum=0;
char c;
c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
sum=sum*10+c-'0';
c=getchar();
}
x=sum;
}
int main(){
// freopen("pretest4.in","r",stdin);
// freopen("pretest.out","w",stdout);
freopen("birds.in","r",stdin);
freopen("birds.out","w",stdout);
read(n);
for(int i=1;i<n;i++){
int x,y;
read(x);
read(y);
fa[y]=x;
}
for(int i=1;i<=n;i++){
read(b[i]);
if(b[i]){
if(ez[i]>=2) ans-=ez[i]-1;
if(b[fa[i]]&&ez[i]) ans--;
if(!ez[i]&&!b[fa[i]]) ans++;
ez[fa[i]]++;
b[i]=1;
}
}
cout<<ans<<"\n";
read(q);
for(int i=1;i<=q;i++){
int x;
read(x);
if(!b[x]){
if(ez[x]>=2) ans-=ez[x]-1;
if(b[fa[x]]&&ez[x]) ans--;
if(!ez[x]&&!b[fa[x]]) ans++;
ez[fa[x]]++;
b[x]=1;
}
else{
ans+=ez[x]-1;
if(b[fa[x]]) ans++;
ez[fa[x]]--;
b[x]=0;
}
cout<<ans<<"\n";
}
return 0;
}