Submission #1059299

#TimeUsernameProblemLanguageResultExecution timeMemory
1059299beaconmcCat Exercise (JOI23_ho_t4)C++14
31 / 100
2085 ms51028 KiB
#include <bits/stdc++.h>
 
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
 
using namespace std;
const ll maxn = 200005;

ll vals[maxn];

bool visited[maxn];
vector<ll> edges[maxn];
ll root = 0;


ll ans = 0;

vector<ll> dfs2(ll a, ll p){
	vector<ll> ans = {a,0};
	for (auto&i : edges[a]){
		if (!visited[i] && i != p){
			vector<ll> node = dfs2(i, a);
			node[1]++;
			if (vals[ans[0]] < vals[node[0]]) ans = node;

		}
	}
	return ans;
}
void dfs(ll a, ll dist){
	//cout << a << " "<<dist << endl;
	ans = max(ans, dist);
	for (auto&i : edges[a]){
		if (!visited[i]){
			vector<ll> node = dfs2(i, a);
			visited[node[0]] = 1;
			dfs(node[0], dist+node[1]+1);
		}
	}
}


int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	ll n;
	cin >> n;
	FOR(i,0,n) cin >> vals[i];
	FOR(i,0,n-1){
		ll a,b;
		cin >> a >> b;
		a--;b--;
		edges[a].push_back(b);
		edges[b].push_back(a);
	}

	FOR(i,0,n){
		if (vals[i] == n){
			visited[i] = 1;
			dfs(i,0);
		}
	}
	cout << ans << endl;


}
#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...