社区讨论

当你Wa 0pt

P3178[HAOI2015] 树上操作参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjv05ho
此快照首次捕获于
2025/11/04 08:57
4 个月前
此快照最后确认于
2025/11/04 08:57
4 个月前
查看原帖
请检查你的solve是否写成了这样
CPP
int solve(int x) {
	if (x == 1) return posval[1];
	int ans = 0;
//	cout << x << '\n';
	
	while (x != 1) {
//		cout << "nailong" << id[top[x]] << ' ' << id[x] << '\n';
		ans += query(id[top[x]], id[x], 1);
//		cout << "nailong" << ans;
		x = fa[top[x]];
	}
	
	return ans;
}
实际上不需要这这种东西,还容易错。。其实直接用求lca的板子就可以了
CPP
int solve(int x, int y) {
	int ans = 0;
	while (top[x] != top[y]) {
		if (dep[top[x]] < dep[top[y]]) swap(x, y);
		ans += query(id[top[x]], id[x], 1);
		x = fa[top[x]];
	}
	if (dep[x] > dep[y]) swap(x, y);
	return ans += query(id[x], id[y], 1);
}

回复

0 条回复,欢迎继续交流。

正在加载回复...