Subtask #1全T,求条
查看原帖
Subtask #1全T,求条
1559156
CXCgood楼主2025/8/5 07:54
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m, s, dis[1000005], fa[1000005];
bool vis[1000005];
vector<ll>bian[1000005];
struct node{
    ll x, c;//x代表节点,c代表深度;
};
void bfs(){
    queue<node>que;node a;
    que.push({s, 1});vis[s]=1;dis[s]=1;fa[s]=1;
    while(que.size()){
        a=que.front(); que.pop();
        for(auto v:bian[a.x]){
            if(vis[v]==0){que.push({v, a.c+1});vis[v]=1;dis[v]=a.c+1;fa[v]=a.x;}
        }
    }
}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> n >> m >> s;
    for(ll i=1; i<n; i++){
        ll x, y;cin >> x >> y;
        bian[x].push_back(y);
        bian[y].push_back(x);
    }
    bfs();
    while(m--){
        ll a, b, x, y;
        cin >> a >> b;
        x=a, y=b;
        if(dis[a]>dis[b])
            for(ll i=0; i<dis[a]-dis[b]; i++)x=fa[x];
        else if(dis[b]>dis[a])
            for(ll i=0; i<dis[b]-dis[a]; i++)y=fa[y];
        while(x!=y)x=fa[x],y=fa[y];
        cout<<x<<'\n';
    }
	return 0;
}
2025/8/5 07:54
加载中...