RE0 : 从爆零开始的RE生活
  • 板块灌水区
  • 楼主_LFC_
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/8/27 21:44
  • 上次更新2024/8/28 08:51:06
查看原帖
RE0 : 从爆零开始的RE生活
1431280
_LFC_楼主2024/8/27 21:44

没错我是来求条的(

RE0指代码因RE导致爆零(

蒟蒻无聊水了个倍增求LCA模板,但是它怎么RE了(哭

哇我快读都善掉了,,,

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
const int M = log2 (N) + 1;
int f[N][M], a[N], depth[N];
vector<int> e[N];
int n, m, rt;

int create_ST (int u, int fa) {
	depth[u] = depth[fa] + 1;
	int k = log2 (n);
	for (int i = 0; i <= k; i ++) {
		f[u][i + 1] = f[f[u][i]][i];
	}
	for (int i = 0 ; i < e[u].size(); i ++) {
		int j = e[u][i];
		if (j == fa) continue;
		f[j][0] = u;
		create_ST(j, u);
	}
}

inline int LCA (int x, int y) {
	if (depth[x] < depth[y]) swap(x, y);
	int k = log2 (n);
	for (int i = k; i >= 0; i --) {
		if (depth[f[x][i]] >= depth[y]) x = f[x][i];
		if (x == y) return x;
	}
	for (int i = k ; i >= 0; i --) {
		if (f[x][i] != f[y][i]) {
			x = f[x][i];
			y = f[y][i];
		}
	}
	return f[x][0];
}

int main() {
	int x, y;
	scanf ("%d%d%d", &n, &m, &rt);
	for (int i = 1; i < n; i ++) {
		scanf ("%d%d", &x, &y);
		e[x].push_back(y);
		e[y].push_back(x);
	}
	create_ST (rt, 0);
	for (int i = 1; i <= m; i ++) {
		scanf ("%d%d", &x, &y);
		printf ("%d\n", LCA (x, y));
	}
	return 0;
}
2024/8/27 21:44
加载中...