Submission #1031952

#TimeUsernameProblemLanguageResultExecution timeMemory
1031952ten_xdCat Exercise (JOI23_ho_t4)C++17
31 / 100
2061 ms35288 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define rep(a,b) for(int a = 0; a < (b); ++a)
#define all(t) t.begin(), t.end()
#define pb push_back

const int N = 5e5+5, INF = 2e9+54321;
const ll INF_L = (ll)2e18+54321;

int n,wie,mx,odl,nrw;
int A[N];
vector<int> G[N];
bool vis[N];

void DFS2(int v, int par, int di)
{
	mx = max(mx,A[v]);
	if(mx == A[v]) odl = di, nrw = v;
	for(auto x : G[v])
	{
		if(x == par or vis[x]) continue;
		DFS2(x,v,di+1);
	}
}

ll DFS(int v)
{
	//cout << "VV: " << v << '\n';
	vis[v] = 1;
	ll val = 0;
	for(auto x : G[v])
	{
		mx = -1, odl = 0;
		if(!vis[x])
		{
			DFS2(x,v,1);
			val = max(val,odl+DFS(nrw));
		}
	}
	//cout << "V: " << v << " VAL: " << val << '\n';
	return val;
}

void solve()
{
	cin >> n;
	for(int i = 1; i <= n; ++i) cin >> A[i];
	rep(i,n-1)
	{
		int a,b;
		cin >> a >> b;
		G[a].pb(b), G[b].pb(a);
	}

	for(int i = 1; i <= n; ++i) if(A[i] == n) wie = i;
	cout << DFS(wie) << '\n';
}

int main()
{	
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int T = 1;
	//cin >> T;
	while(T--) solve();

	return 0;
}
#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...