#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
int x,y;
int flag;
}a[100010];
string s;
int m;
void dfs(int k){
//cout<<k<<endl;
if(k==0) return;
if(a[k].flag==0) a[k].flag=1;
else if(a[k].flag==1) a[k].flag=0;
dfs(a[k].x);
dfs(a[k].y);
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int xx;
scanf("%d",&xx);
//cout<<a[xx].x<<" "<<a[xx].y<<endl;
if(a[xx].x==0){
a[xx].x=i+1;
}
else a[xx].y=i+1;
}
/*for(int i=1;i<=n;i++){
cout<<a[i].x<<" "<<a[i].y<<endl<<endl;
}*/
cin>>s;
for(int i=0;i<s.size();i++){
a[i+1].flag=s[i]-'0';
}
cin>>m;
for(int i=1;i<=m;i++){
int r;
scanf("%d",&r);
dfs(r);
}
for(int i=1;i<=n;i++) cout<<a[i].flag;
}
有没有大佬能帮忙优化一下,有好多点TLE,谢谢。 https://www.luogu.com.cn/problem/P10722