#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
#define len(v) (int)((v).size())
template<typename T>
ostream& operator<<(ostream& out, const vector<T> &a){
	for  (auto& x : a){
		out << x << ' ';
	}
	out << '\n';
	return out;
}
template<typename T>
istream& operator>>(istream& in, vector<T> &a){
	for (size_t i = 0; i < a.size(); ++i){
		in >> a[i];
	}
	return in;
}
mt19937 gen;
const int N = 2e5 + 7;
vector<int> g[N];
int a[N];
bool us[N];
pair<int, int> dfs2(int v, int p){
	pair<int, int> res = {v, 0};
	for (int u : g[v]){
		if (u == p) continue;
		if (us[u]) continue;
		pair<int, int> r = dfs2(u, v);
		r.second++;
		if (a[r.first] > a[res.first]) res = r;
	}
	return res;
}
int dfs(int v){
	pair<int, int> cf = dfs2(v, v);
	v = cf.first;
	int res = 0;
	us[v] = true;
	for (int u : g[v]){
		if (!us[u]){
			res = max(res, dfs(u));
		}
	}
	us[v] = false;
	return res + cf.second + 1;
}
inline void solve() {
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i){
		cin >> a[i];
		us[i] = false;
	}
	for (int i = 0; i < n - 1; ++i){
		int x, y;
		cin >> x >> y;
		g[--x].push_back(--y);
		g[y].push_back(x);
	}
	int ans = 0;
	for (int i = 0; i < n; ++i){
		if (a[i] == n){
			ans = dfs(i);
		}
	}
	cout << ans - 1 << '\n';
}
signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cout.precision(60);
	int t = 1;
//	cin >> t;
	while (t--) {
		solve();
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |