求问,洛谷下载的数据在洛谷IDE和本地都对可交上却WA的原因
查看原帖
求问,洛谷下载的数据在洛谷IDE和本地都对可交上却WA的原因
1105372
TerrenceTao楼主2025/1/23 10:32

代码如下,在线IDE和本地运行得出第一个点是对的,交上去0分

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
int root,n,T,dep[N],f[20][N],lg[N];
vector<int>v[N];
void dfs(int k,int fath){
	for(int i = 0;i < v[k].size();++i){
		if(v[k][i] == fath)continue;
		f[0][v[k][i]] = k;
		dep[v[k][i]] = dep[k]+1;
		dfs(v[k][i],k);
	}
}
int LCA(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i = 20;i >= 0;--i){
		if(dep[f[i][x]] >= dep[y])x = f[i][x];
	}if(x==y)return y;
	for(int i = 20;i >= 0;--i){
		if(f[i][x] != f[i][y]){
			x=f[i][x];
			y=f[i][y];
		}
	}
	return f[0][x];
}
int main(){
//	freopen("P3379_1.in","r",stdin);
//	cin.tie();cout.tie();
//	ios::sync_with_stdio(false);
	cin >> n >> T >> root;
	for(int i = 1;i <= n-1;++i){
		int x,y;
		cin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x);
	}lg[0]=-1;
	for(int i = 1;i <= n;++i){
		lg[i] = lg[i/2]+1;
	}dep[root]=1;
	dfs(root,0);
	for(int i = 1;i <= 20;++i){
		for(int j = 1;j <= n;++j){
			f[i][j] = f[i-1][f[i-1][j]];
		}
	}
	while(T--){
		int x,y;
		cin >> x >> y;
		if(x==y){
			cout<<x;
			continue;
		}
		cout << LCA(x,y) << endl;
	}
	return 0;
}
2025/1/23 10:32
加载中...