2 solutions

  • 1
    @ 2026-3-5 19:18:51
    
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    bool b[N];
    vector<int> v[N];
    int c[N];
    void dfs(int u)
    {
        b[u]=1-b[u];
        for(auto j:v[u])
        {
            dfs(j);
        }
    }
    int main()
    {
        int n;
        cin>>n;
        if(n<=1000)
        {
            for(int i=1;i<=n-1;i++)
            {
                int a;
                cin>>a;
                v[a].push_back((i+1));
            }
            for(int i=1;i<=n;i++)
            {
                char c;
                cin>>c;
                if(c=='1')
                {
                    b[i]=1;//黑
                }
                else
                {
                    b[i]=0;//白
                }
            }
            int q;
            cin>>q;
            while(q--)
            {
                int t;
                cin>>t;
                dfs(t);
            }
            for(int i=1;i<=n;i++)
            {
                cout<<b[i];
            }
        }
        else
        {
            for(int i=2;i<=n;i++)
            {
                int x;
                cin>>x;
            }
            for(int i=1;i<=n;i++)
            {
                char c;
                cin>>c;
                if(c=='1')
                {
                    b[i]=1;//黑
                }
                else
                {
                    b[i]=0;//白
                }
            }
            int q;
            cin>>q;
            for(int i=1;i<=q;i++)
            {
                int x;
                cin>>x;
                c[x]++;
            }
            for(int i=1;i<=n;i++)
            {
                c[i]=c[i-1]+c[i];
                if(c[i]%2==1)
                {
                    b[i]=1-b[i];
                }
                else
                {
                    ;
                }
            }
            for(int i=1;i<=n;i++)
            {
                cout<<b[i];
            }
        }
        return 0;
    }
    
    • 1
      @ 2025-8-25 9:13:53
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      vector<int> g[N];
      bool w[N];
      int s[N]; 
      void dfs(int u,int now) //遍历以u为根的子树 
      { 
      	now+=s[u]; //累加操作次数 
      	if(now&1) w[u]=!w[u]; //操作了奇数次 
      	for(auto x:g[u]) //遍历所有的孩子节点 
      	{
      		dfs(x,now);
      	}
      }
      int main()
      {
      	int n;
      	cin>>n;
      	for(int i=1;i<n;i++) //构建树 
      	{
      		int x;
      		cin>>x;
      		g[x].push_back(i+1);
      	}
      	for(int i=1;i<=n;i++) //获取节点颜色 
      	{
      		char ch;
      		cin>>ch;
      		w[i]=ch-'0';
      	}
      	int q;
      	cin>>q;
      	while(q--) //处理每个操作 
      	{
      		int x;
      		cin>>x;
      		s[x]++;
      	}
      	dfs(1,0);//开始遍历 
      	for(int i=1;i<=n;i++)
      	{
      		cout<<w[i];
      	}
      	return 0;
      }
      
      
      • 1

      Information

      ID
      2188
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      22
      Accepted
      3
      Uploaded By