为什么全部RE
查看原帖
为什么全部RE
530500
Andy2035楼主2023/4/4 22:09
#include<bits/stdc++.h>
#define For(i,x,y) for(int i = x;i<y;i++)
#define _for(i,x,y) for(int i = x;i<=y;i++)
#define pb push_back
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
int n,m,s;
vector<int> G[N];
int f[N][20];
int dist[N];
int dfs(int u,int fa){
    for(auto i:G[u]){
        if(i==fa)continue;
        dist[i] = dist[u] + 1;
        f[i][0] = u;
        dfs(i,u);
    }
}
void init(){
    for(int j = 1;j<=18;j++){
        _for(i,1,n)f[i][j] = f[f[i][j-1]][j-1];
    }
}
int LCA(int x ,int y){
    if(dist[x]>dist[y])swap(x,y);
    for(int i = 18;i>=0;i--)
        if(dist[f[y][i]]>=dist[x])
            y = f[y][i];
    if(x==y)return x;
    for(int i= 18;i>=0;i--)
        if(f[x][i]!=f[y][i])
            x = f[x][i],y = f[y][i];
    return f[x][0];
}
int main(){
    cin>>n>>m>>s;
    For(i,1,n){
        int a,b;cin>>a>>b;
        G[a].pb(b),G[b].pb(a);
    }
    dist[s] = 1;dfs(s,0);/**/
    init();
    while(m--){
        int u,v;
        cin>>u>>v;
        cout<<LCA(u,v)<<endl;
    }
    return 0;
}
2023/4/4 22:09
加载中...