0分球条(带注释)
查看原帖
0分球条(带注释)
1179543
514czh楼主2025/1/1 16:17
#include<bits/stdc++.h>
using namespace std;
struct asd{//节点 
	int l;//左子 
	int r;//右子 
	int c;//颜色 
	int g;//换色 
}a[100005];
int n,m,b; 
void dfs(int x,int gl){
	if(a[x].g){//反转操作 
		if(gl==1)
		gl=0;
		else gl=1;
	}
	if(gl){ //换色 
		if(a[x].c)
		a[x].c=0;
		else a[x].c=1;
	}
	if(a[x].r){//递归到子树 
		dfs(a[x].r,gl);
	}
	if(a[x].l)
	dfs(a[x].l,gl);
	return ;
}
string x;
int main(){
	cin>>n;
	for(int i=2;i<=n;i++){
		cin>>b;
		if(a[b].l==0)//认爸爸 
		a[b].l=i;
		else a[b].r=i;
	}
	cin>>x;
	for(int i=0;i<n;i++){
		a[i+1].c=x[i]-'0';//上色 
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>b;
		a[b].g=1;//换色 
	}
	dfs(1,0);//跑一遍 
	for(int i=1;i<=n;i++){
		cout<<a[i].c;//输出 
	}
	return 0;
}
2025/1/1 16:17
加载中...