预期输入与实际输入不符,求调
  • 板块学术版
  • 楼主Xiaonao_Dali
  • 当前回复7
  • 已保存回复7
  • 发布时间2025/7/24 15:56
  • 上次更新2025/7/24 19:24:54
查看原帖
预期输入与实际输入不符,求调
1076621
Xiaonao_Dali楼主2025/7/24 15:56
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 200005
int n,q;
vector<int> e[N];
int f[N][20],dep[N];
void dfs(int x,int fa){
	f[x][0]=fa;
	dep[x]=dep[fa]+1;
	for(auto y:e[x]){
		if(y==fa) continue;
		dfs(y,x);
	}
}
int LCA(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	int k=dep[x]-dep[y];
	for(int i=19;i>=0;i--){
		if(k>=(1<<i)){
			x=f[x][i];
			k-=(1<<i);
		} 
		if(x==y) return x;
		for(int i=19;i>=0;i--){
			if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
		}
	}
	return f[x][0];
	
}
signed main(){
	cin>>n>>q;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	dfs(1,0);
	for(int j=1;j<20;j++){
		for(int i=1;i<=n;i++){
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
	while(q--){
		int x,y;
		cin>>x>>y;
		int k=LCA(x,y);
		cout<<(dep[x]-dep[k])+(dep[y]-dep[k])<<endl;
	}
	return 0;
}

输入:

5 3
1 2
1 3
3 4
3 5
1 3
2 5
1 4

预期

1
3
2

实际

3
5
4
2025/7/24 15:56
加载中...