#include<bits/stdc++.h>
using namespace std;
int n;
bool a[1000005];
int belong[1000005],v1[1000005],v2[1000005],belcnt;
vector<int> g[1000005],g2[1000005];
void dfs(int u,int bel){
belong[u]=bel;
for (auto&v:g[u]){
if (!belong[v]&&a[v]==a[u])dfs(v,bel);
}
}
void dfs1(int u,int sum){
v1[u]=sum;
for (auto&v:g2[u]){
if (v1[v]==-1)dfs1(v,sum+1);
}
}
void dfs2(int u,int sum){
v2[u]=sum;
for (auto&v:g2[u]){
if (v2[v]==-1)dfs2(v,sum+1);
}
}
signed main(){
cin>>n;
for (int i=1;i<=n;cin>>a[i++]);
for (int i=1;i<n;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v),g[v].push_back(u);
}
for (int i=1;i<=n;i++){
if (!belong[i])belong[i]=++belcnt,dfs(i,belcnt);
}
for (int i=1;i<=n;i++){
for (auto&v:g[i]){
if (belong[i]!=belong[v])g2[belong[i]].push_back(belong[v]);
}
}
memset(v1,-1,sizeof v1);
memset(v2,-1,sizeof v2);
dfs1(1,0);
int maid=1;
for (int i=1;i<=belcnt;i++){
if (v1[i]>v1[maid])maid=i;
}
dfs2(maid,1);
int ma=1;
for (int i=1;i<=belcnt;i++){
if (v2[i]>v2[ma])ma=i;
}
cout<<(v2[ma]+1)/2;
return 0;
}