#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int n,ans=0;
bool a[N+10],b[N+10];
vector<int>s[N];
int dp[N+10][4];
void dfs(int k)
{
for(int i=0;i<s[k].size();i++)
{
if(b[s[k][i]]) continue;
b[s[k][i]]=1;
dfs(s[k][i]);
if((dp[s[k][i]][0]>=dp[k][0]) and (a[s[k][i]]==1 or dp[k][0]>0 ) )
{
dp[k][0]=dp[s[k][i]][0]+1;
dp[k][1]=s[k][i];
}
if((dp[s[k][i]][2]>=dp[k][2]) and (a[s[k][i]]==0 or dp[k][2]>0 ) )
{
dp[k][2]=dp[s[k][i]][2]+1;
dp[k][3]=s[k][i];
}
if(dp[k][1]==dp[k][3]) continue;
ans=max(ans,dp[k][0]+dp[k][2]);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=0;i<n-1;i++)
{
int u,v; cin>>u>>v;
s[u].push_back(v);
s[v].push_back(u);
}
b[1]=1;
dfs(1);
cout<<ans;
}