求大佬修改
查看原帖
求大佬修改
1352794
114514ql楼主2024/7/6 16:04
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
vector<int>g[N];
int dep[N],fa[N][21];
void dfs(int cur,int pre){
    dep[cur]=dep[pre]+1;
    fa[cur][0] = pre;
    for(int i=1;i<=20;++i)fa[cur][i]=fa[fa[cur][i-1]][i-1];
    for(int ver : g[cur])
        if(ver != pre)
            dfs(ver,cur);
}
int lca(int x,int y){
    if(dep[x]<dep[y]) swap(x,y);
    for(int i=20;i>=0;--i)if(dep[fa[x][i]>=dep[y])x=fa[x][i];
    if(x==y) return x;
    for(int i=20;i<=0;--i)
    return fa[x][0];
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n,m;
    cin>>n>>m;
    int u,v;
    for (int i=1;i<=n;i++) cin>>a[i];
    dfs(1,0);
    while(m --){
        cin>>u>>v;
        int l=lca(u,v);
        cout<<S[u]+S[v]-S[l]-S[fa[1][0]]<<endl;
    }
    return 0;
}
2024/7/6 16:04
加载中...