Submission #929149

#TimeUsernameProblemLanguageResultExecution timeMemory
929149imarnCat Exercise (JOI23_ho_t4)C++14
100 / 100
236 ms44628 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define vp vector<pii> using namespace std; const int N=2e5+5; vector<int>g[N]; int pr[N],up[N][21],dep[N],h[N]; ll dp[N]{0}; int get(int r){ return pr[r]==r?r:pr[r]=get(pr[r]); } void dfs(int u,int p,int l){ up[u][0]=p;dep[u]=l; for(int i=1;i<=20;i++)up[u][i]=up[up[u][i-1]][i-1]; for(auto v:g[u]){ if(v==p)continue; dfs(v,u,l+1); } } int qr(int a,int b){ if(dep[a]>dep[b])swap(a,b); for(int i=20;i>=0;i--)if(dep[up[b][i]]>=dep[a])b=up[b][i]; if(a==b)return a; for(int i=20;i>=0;i--)if(up[a][i]!=up[b][i])a=up[a][i],b=up[b][i]; return up[a][0]; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n;cin>>n; for(int i=1;i<=n;i++)cin>>h[i]; for(int i=1,u,v;i<=n-1;i++){ cin>>u>>v;g[h[u]].pb(h[v]);g[h[v]].pb(h[u]); }iota(pr,pr+n+1,0);dfs(1,1,0); for(int i=2;i<=n;i++){ for(auto v:g[i]){ int p=get(v); if(p<i)dp[i]=max(dp[i],dp[p]+dep[p]+dep[i]-2*dep[qr(i,p)]),pr[p]=i; } }cout<<dp[n]; }
#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...