求助大佬
查看原帖
求助大佬
592681
ran_Diana楼主2022/2/9 09:27

为什么不输出啊???

#include<bits/stdc++.h>
using namespace std;
struct Edge{int nt,to;}e[100000];
int cnt,head[100000],dep[100000],n,m,s,x,y,a,b,fa[100000];
void swap(int x,int y)
{
	int t=x;
	x=y;
	y=t;
}
void add(int x,int y)
{
	e[++cnt].nt=head[x];
	head[x]=cnt;
	e[++cnt].to=y;
}
void dfs(int f)
{
	for(int i=head[f];i;i=e[i].nt)
	{
		int t=e[i].to;
		if(!dep[t])
		{
			dep[t]=dep[f]+1;
			fa[t]=f;
			dfs(t);
		}
		
	}
}
int bfs(int x,int y)
{
	if(dep[x]<dep[y]) swap(x,y);
	while(1)
	{
		if(dep[x]==dep[y]) break;
		x=fa[x];
	}
	if(x==y) return y;
	while(1)
	{
		x=fa[x];y=fa[y];
		if(x==y)
		return x;
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	dep[s]=1;
	dfs(s);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&a,&b);
		printf("%d\n",bfs(a,b));
	} 
 	return 0;
}
2022/2/9 09:27
加载中...