Submission #827873

#TimeUsernameProblemLanguageResultExecution timeMemory
827873CSQ31Cat Exercise (JOI23_ho_t4)C++17
21 / 100
2075 ms35428 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define sz(a) (int)(a.size()) #define all(a) a.begin(),a.end() #define lb lower_bound #define ub upper_bound #define owo ios_base::sync_with_stdio(0);cin.tie(0); #define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr) #define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\ debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC)) typedef long long int ll; typedef long double ld; typedef pair<ll,ll> PII; typedef pair<int,int> pii; typedef vector<vector<int>> vii; typedef vector<vector<ll>> VII; ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);} const int MAXN = 2e5+5; vector<int>adj[MAXN]; vector<pii>g[MAXN]; int p[MAXN],rp[MAXN],t[4*MAXN],lazy[4*MAXN]; void pushdown(int v){ if(!lazy[v])return; t[2*v] = lazy[2*v] = t[2*v+1] = lazy[2*v+1] = lazy[v]; lazy[v] = 0; } void upd(int v,int l,int r,int tl,int tr,int val){ if(l>r)return; if(l==tl && r==tr){ t[v] = lazy[v] = val; return; } pushdown(v); int tm = (tl+tr)/2; upd(2*v,l,min(r,tm),tl,tm,val); upd(2*v+1,max(l,tm+1),r,tm+1,tr,val); t[v] = max(t[2*v],t[2*v+1]); } int query(int v,int l,int r,int tl,int tr){ if(l>r)return -1; if(l==tl && r==tr)return t[v]; pushdown(v); int tm = (tl+tr)/2; return max( query(2*v,l,min(r,tm),tl,tm), query(2*v+1,max(l,tm+1),r,tm+1,tr)); } int dep[MAXN],par[MAXN],ded[MAXN]; void dfs(int v){ for(int x:adj[v]){ if(x != par[v]){ par[x] = v; dep[x] = dep[v]+1; dfs(x); } } } int dfs2(int v){ int mx = 0; for(pii x:g[v]){ mx = max(mx,dfs2(x.fi)+x.se); } return mx; } int find(int v,int u){ int res = p[v]; for(int x:adj[v]){ if(x==u || ded[x])continue; res = max(res,find(x,v)); } return res; } void solve(int v,int p){ v = rp[find(v,-1)]; ded[v] = 1; if(p)g[p].pb({v,abs(dep[v]-dep[p])}); for(int x:adj[v]){ if(ded[x])continue; solve(x,v); } } int main() { owo int n; cin>>n; for(int i=1;i<=n;i++){ cin>>p[i]; rp[p[i]] = i; } for(int i=1;i<n;i++){ int v,u; cin>>v>>u; adj[v].pb(u); adj[u].pb(v); } dfs(rp[n]); solve(1,0); cout<<dfs2(rp[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...