Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<vector>
- using namespace std;
- int res;
- vector<int> roots, init, goal;
- vector<vector<int>> suka(100000);
- void DFS(int branch, vector<int> change, int level){
- if (abs(init[branch-1] - change[level]) == goal[branch-1]){
- for(int v:suka[branch]){
- DFS(v, change, 1-level);
- }
- }
- else{
- res++;
- roots.push_back(branch);
- change[level] = 1 - change[level];
- for(int v:suka[branch]){
- DFS(v, change, 1-level);
- }
- }
- }
- int main(){
- int n, child, dad, num;
- cin>>n;
- cin>>child>>dad;
- if (child != 1){
- suka[dad].push_back(child);
- for (int i = 3; i < n+1; i++){
- cin>>child>>dad;
- suka[dad].push_back(child);
- }}
- else{
- suka[child].push_back(dad);
- for (int i = 3; i < n+1; i++){
- cin>>child>>dad;
- suka[child].push_back(dad);
- }
- }
- for (int i = 0; i < n; i++){
- cin >> num;
- init.push_back(num);
- }
- for (int i = 0; i < n; i++){
- cin >> num;
- goal.push_back(num);
- }
- vector<int> c (2, 0);
- DFS(1, c, 0);
- cout<<res;
- for (int i = 0; i < res; i++){
- cout<<endl<<roots[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement