CE
  • 板块学术版
  • 楼主muslim_tianjin
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/10 21:36
  • 上次更新2024/10/11 07:27:42
查看原帖
CE
1459799
muslim_tianjin楼主2024/10/10 21:36
#include <bits/stdc++.h>
#define SACRIFICING using
#define THE namespace
#define QUEEN std
SACRIFICING THE QUEEN;
typedef long long ll;
const int maxxx=109; 
int Log;
int n,x,y;
struct{
	vector<int>q;	
}tr[maxxx];
int dep[maxxx];
int fa[maxxx][10];
int xx,yy;
int nodes[1009];
int connodes[1009];
int difa[10009];
int f(int dd);
int g(int dd);
void dfs(int cur,int root,int node){
	if(cur>n){
		return ;
	}
	dep[cur]=dep[root]+1;	
	nodes[node]=cur;
	connodes[cur]=node;
	dfs(*(tr[cur].q.begin()),cur,node<<1);
	dfs(*(tr[cur].q.end()),cur,node<<1+1);
}
void ST(){
	for(int i=1;i<=n;i++){
		fa[f(i)][0]=g(difa[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=Log;j++){
			fa[f(i)][j]=fa[fa[i][j-1]][j-1];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=Log;j++){
			fa[f(i)][j]=f(fa[fa[i][j-1]][j-1]);
		}
	}
}
int query(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i=Log;i>=0;i--){
		if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
	}
	for(int i=Log;i>=0;i--){
		if(fa[x][i]!=fa[y][i]){
			x=fa[x][i];
			y=fa[y][i];
		}
	}
	return fa[x][0];
}
int main(){
	scanf("%d%d%d",&n,&x,&y);
	Log=ceil(1.0*log2(n));
	for(int i=1;i<n;i++){
		scanf("%d%d",&xx,&yy);
		tr[yy].q.push_back(xx);
		difa[xx]=yy;
	}
	dfs(1,1,1);
	ST();
	cout<<query(x,y);
	return 0;
}
int f(int dd)
    return nodes[dd];
int g(int dd)
    return connodes[dd];

main.cpp: In function ‘int f(int)’: main.cpp:73:5: error: named return values are no longer supported 73 | return nodes[dd]; | ^~~~~~ compilation terminated due to -fmax-errors=1.

2024/10/10 21:36
加载中...