求助!为何RE?本地都可以的
查看原帖
求助!为何RE?本地都可以的
109619
Shaoqirui楼主2021/8/13 11:14
#include<bits/stdc++.h>
using namespace std;
map<int,map<int,bool> >a;
vector<int> chd[50000];
vector<int> ola;
int pa[50000];
int fi[50000];
int deep[50000];
int dfs(int p){
	ola.push_back(p);
	for(vector<int>::const_iterator it = chd[p].begin(); it != chd[p].end(); it++){
		dfs(*it);
		ola.push_back(p);
	}
}
int mktree(int p,int dee){
	deep[p]=dee;
	vector<int> v;
		for(map<int,bool>::iterator it = a[p].begin(); it != a[p].end(); it++){
			if(it->second==1){
				chd[p].push_back(it->first);
				v.push_back(it->first);
				pa[it->first]=p;
				a[it->first][p]=0;
			}
		}
		for(vector<int>::const_iterator it = v.begin(); it != v.end(); it++){
			mktree(*it,dee+1);
		}
	
}
int find(int x,int y){
	if(fi[x]>fi[y])swap(x,y);
	int pi=deep[x],lca=x;
	for(int i=fi[x];i<=fi[y];i++){
		if(deep[ola[i]]<pi){
			pi=deep[ola[i]];
			lca=ola[i];
		}
	}
	return lca;
}
int main(){
int n,m,s;
	cin>>n>>m>>s;
	for(int i=0;i<=n;i++){
		fi[i]=-1;
	}
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y; 
		a[x][y]=1;
		a[y][x]=1;
	}
	mktree(s,1);
	dfs(s);
	int l=1;
	for(vector<int>::const_iterator it = ola.begin(); it != ola.end(); it++,l++){
		if(fi[*it]==-1)fi[*it]=l;
	}
	while(m--){
		int x,y;
		cin>>x>>y;
		cout<<find(x,y)<<endl;
	}
}
2021/8/13 11:14
加载中...