奇怪的东西
查看原帖
奇怪的东西
528562
_Niaoniao_楼主2022/8/21 22:04

WonderfulWonderful AnswerAnswer

#include<bits/stdc++.h>
using namespace std;
struct A{
	int x,y;
}tree[1000001];
int n,m,s;
int d[100001],p[200001],top,nxt[100001];
void dfs(int now,int deep){
	d[now]=deep;
	top++;
	p[top]=now;
	nxt[now]=top;
	for(int i=1;i<n;i++){
		if(tree[i].x==now&&d[tree[i].y]==0){
			dfs(tree[i].y,deep+1);
		}
		if(tree[i].y==now&&d[tree[i].x]==0){
			dfs(tree[i].x,deep+1);
		}
	}
}
int find(int a,int b){
	int ai=0,bi=0;
	for(int i=1;i<=top;i++){
		if(p[i]==a){
			ai=i;
		}
		if(p[i]==b){
			bi=i;
		}
		if(ai!=0&&bi!=0){
			break;
		}
	}
	int sum=0,ans=INT_MAX;
	for(int i=min(ai,bi);i<=max(ai,bi);i++){
		if(ans>d[i]){
			d[i]=ans;
			sum=p[i];
		}
	}
	return sum;
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<n;i++){
		cin>>tree[i].x>>tree[i].y;
	}
	dfs(s,1);
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		cout<<find(a,b)<<endl;
	}
	return 0;
}
2022/8/21 22:04
加载中...