#include<iostream>
#include<string>
#include<vector>
#include<algorithm>//sort,reverse
#include<utility>//pair
#include<queue>//queue,priority_queue
#include<deque>//double_ended queue
#include<map>//map
using namespace std;
typedef long long LL; 
typedef pair<LL,LL> P;//Pでpair<-,->を表す。
const LL MAX=2000010;
const LL MOD=1000000007;
typedef map<LL,LL>::iterator Itr;

/*ここから*/
int V;//頂点の個数
vector<int> e[200010];//iから出る辺
vector<int> E[200010];
int t[200010];//親情報の記録媒体

//すでにある辺と頂点の情報から木の作成
void Tree(int s){//sは一番根元
    for(int i=1;i<=V;i++){
        t[i]=i;//初期情報
    }
    queue <int> q;
    q.push(s);
    while(!q.empty()){
        int from;
        from=q.front();
        q.pop();
        while(!e[from].empty()){
            int to;
            to=e[from].back();
            e[from].pop_back();
            if(to!=t[from]){
                t[to]=from;
                q.push(to);
            }
        }
    }
}

int a[200010];
int b[200010];
int c[200010];
int flg[200010];
void C_tree(int s){
    int S=e[s].size();
    //cout<<s<<S<<endl;
    if(S==1&&e[s][0]==t[s]){
        //cout<<'x'<<endl;
        a[s]=1;
        b[s]=1;
        c[s]=0;
        flg[s]=1;
    }
    else{
        //cout<<'y'<<endl;
        int x1=0;
        int x2=0;
        int cnt=0;
        vector<int> y;
        for(int i=0;i<S;i++){
            int x=e[s][i];
            //cout<<s<<' '<<x<<endl;
            if(x!=t[s]){
                if(flg[x]==0){C_tree(x);/*cout<<x<<' '<<a[x]<<' '<<b[x]<<' '<<c[x]<<endl;*/}
                if(a[x]==0){
                    if(b[x]>c[x]){
                        b[s]=b[s]+c[x];
                        c[s]=c[s]+c[x];
                        x1=x1+b[x]-c[x];
                    }
                    else{
                        b[s]=b[s]+b[x];
                        c[s]=c[s]+b[x];
                        x2=x2+c[x]-b[x];
                    }
                }
                else{
                    cnt++;
                    b[s]=b[s]+b[x];
                    c[s]=c[s]+b[x];
                    y.push_back(c[x]-b[x]);
                }
            }
        }
        flg[s]=1;
        b[s]=b[s]+1;
        if(cnt%2==0){a[s]=1;}
        c[s]=c[s]+x2;
        if(a[s]==0){c[s]=c[s]+x1;}
        else{b[s]=b[s]+x1;}
        sort(y.begin(),y.end());
        reverse(y.begin(),y.end());
        int SS=y.size();
        int Cnt=0;
        for(int i=0;i<SS;i++){
            if(Cnt==0){
                c[s]=c[s]+y[i];
            }
            else{
                b[s]=b[s]+y[i];
            }
            Cnt=1-Cnt;
        }
    }
}

/*ここまで*/

int main()
{ 
    //基本用法
    cin>>V;
    for(int i=2;i<=V;i++){
        int A;
        cin>>A;
        e[i].push_back(A);
        e[A].push_back(i);
    }
    for(int i=0;i<=V;i++){
        E[i]=e[i];
    }
    Tree(1);
    for(int i=0;i<=V;i++){
        e[i]=E[i];
    }
    /*for(int i=1;i<=V;i++){
        cout<<t[i]<<endl;
    }*/
    for(int i=0;i<=V;i++){
        a[i]=0;
        b[i]=0;
        c[i]=0;
        flg[i]=0;
    }
    C_tree(1);
    /*for(int i=1;i<=V;i++){
        cout<<a[i]<<' '<<b[i]<<' '<<c[i]<<endl;
    }*/
    cout<<b[1]<<endl;
    return 0;
}
#include <bits/stdc++.h>
#define arr array 
#define pb push_back
#define fs first 
#define sc second
#define eb emplace_back
#define vt vector
#define all(x) (x).begin(), (x).end()
#define rep(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))

using namespace std;
typedef long long ll;
const int maxn=1e5;
const ll MAXLL=9223372036854775807;

vt<int> adj[maxn+10];
vt<bool> vs(maxn+10, false);
vt<int> cnt(maxn, 0), a(maxn), ans;

void dfs(int u){
    vs[u]=true;
    cnt[a[u]]++;
    if (cnt[a[u]]==1) ans.pb(u);
    for (auto v:adj[u]){
        if (vs[v]) continue;
        dfs(v);
    }
    cnt[a[u]]--;
}

void solve(){
   int n;
   cin >> n;
   rep(i, 0, n) cin >> a[i];
   rep(i, 0, n-1){
       int x, y;
       cin >> x >> y, --x, --y;
       adj[x].pb(y);
       adj[y].pb(x);
   } 
   dfs(0);
   sort(all(ans));
   for (auto i:ans) cout << i+1 << endl;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    solve();
}
