关于右移问题
查看原帖
关于右移问题
747916
jingyu0929楼主2023/10/29 09:36

在 LCA 里面用倍增写的时候如果从 35 枚举到 1 的话就是 0pts WA,但是有些点是对的。但是如果是从 20 枚举到 1 的话就是 100pts ,

想问问有什么问题

void dfs(int u,int p) {
	de[u] = de[p] + 1;
	fa[u][0] = p;
	for (int k = 1; k <= 20; k ++) 
		fa[u][k] = fa[fa[u][k - 1]][k - 1];
	for (auto it : e[u]) {
		if (it.v == p) continue;
		w[it.v] = {it.w1, it.w2};
		dfs(it.v,u);
	}
}

int LCA(int x,int y) {
	if (de[x] < de[y]) swap(x,y);
	
	int dh = de[x] - de[y];
	for (int k = 20; k >= 0; k --) {
		if ((dh >> k) & 1) x = fa[x][k];
	}
	
	if (x == y) return x;
	
	for (int k = 20; k >= 0; k --) {
		if (fa[x][k] != fa[y][k]) {
			x = fa[x][k];
			y = fa[y][k];
		}
	}
	
	return fa[x][0];
}
2023/10/29 09:36
加载中...