#include<bits/stdc++.h>
using namespace std;
int n,a[200000],b[2],c[2];
bool f[200000];
vector<int> v[200000];
void dfs1(int l,int s,int g)
{
f[l]=1;
if(a[l]==g)
{
if(b[g]<s)
{
b[g]=s;
c[g]=l;
}
}
for(int i=0;i<v[l].size();i++)
{
if(!f[v[l][i]])
{
dfs1(v[l][i],s+1,g);
}
}
return;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs1(1,1,0);
memset(f,0,sizeof(f));
dfs1(1,1,1);
memset(f,0,sizeof(f));
int z=c[1];
dfs1(c[0],0,abs(a[c[0]]-1));
memset(f,0,sizeof(f));
dfs1(z,0,abs(a[z]-1));
cout<<max(b[0],b[1]);
return 0;
}
评测记录