Tarjan算法求LCA板子

离线算法:适用于无向图,(query建无向边)

利用并查集+DFS

时间复杂度O(n+m)

vector<int>e[maxn];
vector<pii>query[maxn];
int fa[maxn],vis[maxn],ans[maxn];
int find(int u){
	if(u==fa[u])return u;
	if(fa[u]!=u){
		fa[u]=find(fa[u]);
	}
	return fa[u];
}

void tarjan(int u){
	vis[u]=1;
	for(auto v:e[u]){
		if(!vis[v]){
			tarjan(v);
			fa[v]=u;
		}
	}
	
	for(auto q:query[u]){
		int v=q.fi,i=q.se;
		if(vis[v]){
			ans[i]=find(v);
		}
	}
}
posted @ 2025-03-12 20:03  Marinaco  阅读(7)  评论(0)    收藏  举报
//雪花飘落效果