Submission #1320980

#TimeUsernameProblemLanguageResultExecution timeMemory
1320980comet0Cat Exercise (JOI23_ho_t4)C++20
0 / 100
1 ms332 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...