Submission #1263582

#TimeUsernameProblemLanguageResultExecution timeMemory
1263582kustov_vadim_533Cat Exercise (JOI23_ho_t4)C++20
31 / 100
2093 ms24644 KiB
#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 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...