2 solutions
-
1
#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; }
Information
- ID
- 2188
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 22
- Accepted
- 3
- Uploaded By