求助:为什么程序会RE
查看原帖
求助:为什么程序会RE
67558
CyaNeko楼主2020/7/14 12:42
#include<bits/stdc++.h>
using namespace std;
int n,m,s,x,y,f[500001][21],d[500001];
vector<int>e[500001];

int dfs(int x,int p,int _depth)
{
	d[x]=_depth;
	f[x][0]=p;
	int i=0;
	while (f[f[x][i]][i]!=0)
	{
		f[x][i+1]=f[f[x][i]][i];
		i++;
	}
	for (int i=0;i<e[x].size();i++)
		if (e[x][i]!=p)
			dfs(e[x][i],x,_depth+1);
}

int _rise(int x,int y)
{
	while (d[x]>d[y])
		x=f[x][(int)(log2(d[x]-d[y]))];
	return x;
}

int _lca(int x,int y)
{
	if (f[x][0]==f[y][0])
		return f[x][0];
	int i=0;
	while (f[x][i+1]!=f[y][i+1])
		i++;
	return _lca(f[x][i],f[y][i]);
}

int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for (int i=1;i<=n-1;i++)
	{
		scanf("%d%d",&x,&y);
		e[x].push_back(y);
		e[y].push_back(x);
	}
	dfs(s,0,1);
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		if (d[x]<d[y])
			swap(x,y);
		x=_rise(x,y);
		if (x!=y)
			x=_lca(x,y);
		printf("%d\n",x);
	}
}

如题,在DEV里和在线IDE里都能运行出结果,一提交就RE。

2020/7/14 12:42
加载中...