Submission #847812

#TimeUsernameProblemLanguageResultExecution timeMemory
8478128pete8Cat Exercise (JOI23_ho_t4)C++17
100 / 100
212 ms88760 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<algorithm> #include<limits.h> #include<cmath> using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define pll pair<ll,ll> #define pb push_back #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #define int long long #define double long double #define mod 1000000007 const int mxn=2*1e5,lg=25; int pa[mxn+10],n; vector<int>adj[mxn+10]; int he[mxn+10],h[mxn+10],up[mxn+10][lg+10]; void dfs(int cur,int p){ for(auto i:adj[cur]){ if(i==p)continue; up[i][0]=cur; h[i]=h[cur]+1; dfs(i,cur); } } int lca(int a,int b){ if(h[a]<h[b])swap(a,b); int k=h[a]-h[b]; for(int i=0;i<=lg;i++)if(k&(1<<i))a=up[a][i]; if(a==b)return a; for(int i=lg;i>=0;i--){ if(up[a][i]!=up[b][i]){ a=up[a][i]; b=up[b][i]; } } return up[a][0]; } int cal(int a,int b){ return h[a]+h[b]-(2*h[lca(a,b)]); } int find(int u){ if(pa[u]==u)return u; return pa[u]=find(pa[u]); } int dp[mxn+10];//max int32_t main(){ fastio cin>>n; for(int i=1;i<=n;i++){ int a;cin>>a; he[i]=a; pa[i]=i; } for(int i=0;i<n-1;i++){ int a,b;cin>>a>>b; adj[he[a]].pb(he[b]);//id by height adj[he[b]].pb(he[a]); } dfs(n,-1); for(int i=1;i<=lg;i++)for(int j=1;j<=n;j++)up[j][i]=up[up[j][i-1]][i-1]; for(int i=1;i<=n;i++){ for(auto j:adj[i]){ int c=find(j); if(c<i){ dp[i]=max(dp[i],dp[c]+cal(i,c)); pa[c]=i; } } } cout<<dp[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...