제출 #1095375

#제출 시각아이디문제언어결과실행 시간메모리
1095375abcvuitunggioCat Exercise (JOI23_ho_t4)C++17
31 / 100
2096 ms65084 KiB
#include <bits/stdc++.h> using namespace std; int n,h[200001],p[200001][20],d[200001],u,v,mx,r; set <int> ke[200001]; void dfs(int u, int par){ for (int v:ke[u]) if (v!=par){ p[v][0]=u; for (int i=1;i<20;i++) p[v][i]=p[p[v][i-1]][i-1]; d[v]=d[u]+1; dfs(v,u); } } int lca(int u, int v){ if (d[u]<d[v]) swap(u,v); for (int i=19;i>=0;i--) if (d[p[u][i]]>=d[v]) u=p[u][i]; if (u==v) return u; for (int i=19;i>=0;i--) if (p[u][i]!=p[v][i]){ u=p[u][i]; v=p[v][i]; } return p[u][0]; } int dist(int u, int v){ return d[u]+d[v]-d[lca(u,v)]*2; } int dfs3(int u, int par){ int res=u; for (int v:ke[u]) if (v!=par){ int w=dfs3(v,u); res=(h[res]>h[w]?res:w); } return res; } void dfs2(int u, int val){ mx=max(mx,val); for (int v:ke[u]){ ke[v].erase(u); int w=dfs3(v,v); dfs2(w,val+dist(u,w)); } } int main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n; for (int i=1;i<=n;i++){ cin >> h[i]; if (h[i]==n) r=i; } for (int i=1;i<n;i++){ cin >> u >> v; ke[u].insert(v); ke[v].insert(u); } dfs(r,r); dfs2(r,0); cout << mx; }
#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...