#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; vector<int> a; vector<vector<int>> adj;
set<int> cand;
int dfs(int x, int p = -1) {
int e = 0;
for (int nxt : adj[x]) if (nxt != p) e = max(e, dfs(nxt, x));
if (a[x] > e) cand.insert(x);
return max(e, a[x]);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n; int root;
a.resize(n); for (auto& x : a) cin >> x;
adj.resize(n);
for (int i = 1; i < n; i++) {
int u, v; cin >> u >> v; u--; v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
root = find(a.begin(), a.end(), n) - a.begin();
dfs(root); int ans = 0;
queue<int> q; q.emplace(root);
vector<int> vis(n, -1); vis[root] = 0;
while (!q.empty()) {
int cur = q.front(); q.pop();
if (cand.count(cur)) ans = max(ans, vis[cur]);
for (int nxt : adj[cur]) {
if (vis[nxt] != -1) continue;
vis[nxt] = vis[cur] + 1;
q.emplace(nxt);
}
}
cout << ans;
}
| # | 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... |