➤ Problem Link : 429A. Xor
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int vector<int> adj[100001]; vector<int> init,goal; int cnt=0; vector<int> ans; void dfs(int i,int lvl,bool zf,bool of,int p) { if(lvl==0) { if(zf) init[i]=init[i]^1; if(init[i]!=goal[i]) { cnt++; zf=zf^1; ans.push_back(i); } } else { if(of) init[i]=init[i]^1; if(init[i]!=goal[i]) { cnt++; of=of^1; ans.push_back(i); } } for(int j=0;j<adj[i].size();j++) { if(adj[i][j]==p) continue; dfs(adj[i][j],lvl^1,zf,of,i); } } int main() { int n,u,v,a; cin>>n; for(int i=1;i<n;i++) { cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } init.push_back(0); goal.push_back(0); for(int i=0;i<n;i++) { cin>>a; init.push_back(a); } for(int i=0;i<n;i++) { cin>>a; goal.push_back(a); } cnt=0; dfs(1,0,0,0,-1); cout<<cnt<<"\n"; for(auto it : ans) cout<<it<<"\n"; }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!