社区讨论

关于题解虚树求法的正确性?

P2495【模板】虚树 / [SDOI2011] 消耗战参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lo143b7w
此快照首次捕获于
2023/10/22 14:52
2 年前
此快照最后确认于
2023/11/15 21:51
2 年前
查看原帖
题解中有很多建虚树的方法,例如:
CPP
void push_stk(int x){
	if(topp==1) return (void)(stk[++topp]=x);
	int lca=LCA(x,stk[topp]);
	if(lca==stk[topp]) return;
	while(topp>1&&dfn[stk[topp-1]]>=dfn[lca]) G[stk[topp-1]].push_back(stk[topp]),--topp;
	if(stk[topp]!=lca) G[lca].push_back(stk[topp]),stk[topp]=lca;
	stk[++topp]=x;
}
但是这样建成的虚树,可能不会包含所有关键节点, 如本题的第二个询问:关键节点为 5 7 8 35\ 7\ 8\ 3
但以上面的写法,建出来的虚树节点只有 1 5 31\ 5\ 3
为什么虚树没有建完全,却能A呢?是本题的特性吗?

回复

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

正在加载回复...