#include <iostream>
#include <vector>
using namespace std;
int n, c[100005], u, v, ans;
vector <int> g[100005];
void dfs(int nowi, int lsti, int nans)
{
ans = max(ans, nans);
for (int i = 0;i < g[nowi].size();i++)
{
if (g[nowi][i] == lsti)
{
continue;
}
if (c[g[nowi][i]] ^ c[nowi])
{
dfs(g[nowi][i], nowi, nans + 1);
}
}
}
int main()
{
cin >> n;
for (int i = 1;i <= n;i++)
{
cin >> c[i];
}
for (int i = 1;i < n;i++)
{
cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
for (int i = 1;i <= n;i++)
{
dfs(i, 0, 1);
}
cout << ans;
return 0;
}
rt,如上暴力代码可AC。