Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int cnt;
- vector<int> moves;
- void dfs(vector<vector<int>> v, vector<int>& rec, vector<pair<int,int>> pares, int ini, bool changed, bool turn, bool both){
- rec[ini] = 1;
- for(int i = 0; i < v[ini].size(); i++){
- if(rec[v[ini][i]]==0){
- rec[v[ini][i]] = 1;
- if(!both){
- if(!changed){
- if(pares[v[ini][i]].first != pares[v[ini][i]].second){
- cnt++;
- moves.push_back(v[ini][i]);
- dfs(v,rec,pares,v[ini][i],true,false,false);
- }
- else{
- dfs(v,rec,pares,v[ini][i],false,false,false);
- }
- }
- else{
- if(!turn){
- if(pares[v[ini][i]].first != pares[v[ini][i]].second){
- cnt++;
- moves.push_back(v[ini][i]);
- dfs(v,rec,pares,v[ini][i],true,false,true);
- }
- else{
- dfs(v,rec,pares,v[ini][i],true,true,false);
- }
- }
- else{
- if(pares[v[ini][i]].first == pares[v[ini][i]].second){
- cnt++;
- moves.push_back(v[ini][i]);
- dfs(v,rec,pares,v[ini][i],false,false,false);
- }
- else{
- dfs(v,rec,pares,v[ini][i],true,false,false);
- }
- }
- }
- }
- else{
- if(pares[v[ini][i]].first == pares[v[ini][i]].second){
- cnt++;
- moves.push_back(v[ini][i]);
- dfs(v,rec,pares,v[ini][i],true,true,false);
- }
- else{
- dfs(v,rec,pares,v[ini][i],true,true,true);
- }
- }
- }
- }
- }
- int main(){
- int n,x,y;
- cnt = 0;
- cin >> n;
- vector<vector<int>> v(n);
- vector<int> valores(n);
- vector<pair<int,int>> pares(n);
- for(int i = 0; i < n-1; i++){
- cin >> x >> y;
- x--;y--;
- v[y].push_back(x);
- }
- for(int i = 0; i < n; i++){
- cin >> x;
- pares[i].first = x;
- }
- for(int i = 0; i < n; i++){
- cin >> y;
- pares[i].second = y;
- }
- vector<int> rec(n,0);
- if(pares[0].first == pares[0].second){
- dfs(v,rec,pares,0,false,false,false);
- }
- else{
- cnt++;
- moves.push_back(0);
- dfs(v,rec,pares,0,true,false,false);
- }
- cout << cnt << '\n';
- for(auto i : moves){
- cout << i+1 << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement