This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 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... |