记录详情
#include<bits/stdc++.h>
#define M 100010
using namespace std;
int n,p[M],is[M];
int ans,cnt,x[M];
vector<int> g[M];
stack<int> s;
void dfs(int u,int v){
while(x[u]--)s.push(u);
if(is[u]){
if(!s.empty()){
ans++;
while(!s.empty()&&s.top()==u)s.pop();
return;
}
}
for(int i=0;i<g[u].size();i++)if(g[u][i]!=v)dfs(g[u][i],u);
while(!s.empty()&&s.top()==u)s.pop();
}
int main(){
cin>>n;cnt=n-1;
for(int i=1;i<=n;i++)cin>>p[i];
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
is[u]++,is[v]++;
}
for(int i=2;i<=n;i++)if(is[i]!=1)is[i]=0,cnt--;
for(int i=1;i<=cnt;i++)x[p[i]]++;
dfs(1,0);
cout<<ans;
return 0;
}