Submission #1241225

#TimeUsernameProblemLanguageResultExecution timeMemory
1241225nai0610Cat Exercise (JOI23_ho_t4)C++20
31 / 100
6 ms3656 KiB
#include <bits/stdc++.h> #define ll int64_t #define ld long double using namespace std; // const int maxn =1e5+5; const int mod = 1e9+7; // 998244353,1610612741 const ll inf = 1e18; const ld pi = atan(1.0L)*4; int n,p[maxn],par[maxn]; vector<int> g[maxn]; int h[maxn],st[maxn][20]; ll f[maxn]; int find(int u) { return (u==par[u]?u:par[u]=find(par[u])); } void dfs2(int u){ for (auto v:g[u]) { if (st[u][0]==v) continue; h[v]=h[u]+1; st[v][0]=u; for (int i=1;i<=17;i++) st[v][i]=st[st[v][i-1]][i-1]; dfs2(v); } } int calc(int u,int k){ for (int i=0;(1<<i)<=k;i++) { if (k&(1<<i)) u=st[u][i]; } return u; } int lca(int u,int v){ if (h[u]!=h[v]) { if (h[u]<h[v]) swap(u,v); u=calc(u,h[u]-h[v]); } if (u==v) return u; for (int i=__lg(h[u]);i>=0;i--){ if (st[u][i]!=st[v][i]){ u=st[u][i]; v=st[v][i]; } } return st[u][0]; } int dist(int u,int v) { int lc=lca(u,v); return h[u]+h[v]-2*h[lc]; } int main() { // freopen("../input.inp","r",stdin); // freopen("output.out","w",stdout); ios::sync_with_stdio(false); cin.tie(nullptr); clock_t start,end; start=clock(); cin >>n; for (int i=1;i<=n;i++) cin >>p[i],par[i]=i; for (int i=1;i<n;i++) { int u,v; cin >>u>>v; u=p[u];v=p[v]; g[u].push_back(v); g[v].push_back(u); } dfs2(1); for (int i=1;i<=n;i++) { for (auto j:g[i]) { if (j<i) { int u=find(j); f[i]=max(f[i],f[u]+dist(i,u)); par[u]=i; } } } cout <<*max_element(f+1,f+1+n); end=clock(); ld dur=(ld)(end-start)/(ld)(CLOCKS_PER_SEC)*(1000.0L); cerr<<dur<<'\n'; 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...