mycs

导航

 

tarjan

/*
dfs1 dep[N] siz[N] son[N] fa[N]
dfs2 top[N]
*/
node* tarjan(node* a, node* b) {
	if (top[a] == NULL || top[b] == NULL)return NULL;
	while (top[a] != top[b]) {//a和b分别在两个不同的重链

		if (top[a]->dep < top[b]->dep)swap(a, b);//一次只跳深度大的一个
		a = fa[top[a]];                          //跳到上一个重链
	}
	 
	if (a->dep > b->dep)swap(a, b);//比较的是a和b的深度 返回深度小的
	return a;
}
posted on 2025-11-07 19:04  Radarman108  阅读(3)  评论(0)    收藏  举报