#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1e7+5;
int n;
vector<int>tree[N];//tree[i][son]表示节点i的子节点son们
bool cl[N];//cl[i]用于存储节点i的颜色
void dfs(int u){
cl[u]=!cl[u];//反转颜色(0变1,1变0)
for(int v:tree[u]){
dfs(v);
}
}
int main(){
int q;
cin>>n;
for(int i=1;i<n;i++){
int fa;
cin>>fa;
tree[fa].push_back(i+1);//节点fa添加子节点i+1
}
for(int i=1;i<=n;i++){
char c;
cin>>c;
cl[i]=c-'0';//输入01串
}
cin>>q;
while(q--){
int u;
cin>>u;
dfs(u);//dfs遍历子树并反转
}
for(int i=1;i<=n;i++)cout<<cl[i];
return 0;
}
28个测试点,16个TLE,其余AC