제출 #1351653

#제출 시각아이디문제언어결과실행 시간메모리
1351653ereringCat Exercise (JOI23_ho_t4)C++20
100 / 100
115 ms59896 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=2e5+5,MAXN=1e5+5,MAXA=1e6+5,inf=1e9,MOD=998244353;
int n,p[N],par[N],pos[N],up[N][20],depth[N],sol[N];
vector<int> adj[N];
int find(int x){
    return par[x]=(par[x]==x?x:find(par[x]));
}
void dfs(int node,int pr=0,int d=0){
    up[node][0]=pr;
    depth[node]=d;
    for(int i=1;i<20;i++)up[node][i]=up[up[node][i-1]][i-1];
    for(auto i:adj[node]){
        if(i!=pr)dfs(i,node,d+1);
    }
}
int dist(int a,int b){
    int ans=0;
    if(depth[a]>depth[b])swap(a,b);
    for(int i=19;i>=0;i--){
        if(up[b][i]!=0 && depth[up[b][i]]>=depth[a]){
            b=up[b][i];
            ans+=(1<<i);
        }
    }
    if(a==b)return ans;
    for(int i=19;i>=0;i--){
        if(up[a][i]!=0 && up[a][i]!=up[b][i]){
            a=up[a][i]; b=up[b][i];
            ans+=(1<<(i+1));
        }
    }
    return ans+2;
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>p[i];
        pos[p[i]]=i;
        par[i]=i;
    }
    for(int i=0;i<n-1;i++){
        int u,v; cin>>u>>v;
        adj[u].pb(v); adj[v].pb(u);
    }
    dfs(1);
    for(int i=1;i<=n;i++){
        int node=pos[i];
        for(auto v:adj[node]){
            if(i>p[v]){
                v=find(v);
                sol[node]=max(sol[node],sol[v]+dist(node,v));
                par[v]=node;
            }
        }
    }
    cout<<sol[pos[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...