首页 > 编程语言 >P3379 【模板】最近公共祖先(LCA)tarjan算法

P3379 【模板】最近公共祖先(LCA)tarjan算法

时间:2022-11-08 19:35:54浏览次数:58  
标签:tarjan int LCA back fa maxn P3379 qn

tarjan算法求LCA

//tarjan算法
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
vector<int> tre[maxn];
struct node{
	int to;
	int id;
};
vector<node> query[maxn];
int ans[maxn],vis[maxn],fa[maxn];
int n,m,s;
int find(int x)
{
	if (fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}
void tarjan(int r)
{
	fa[r]=r;
	vis[r]=1;
	for (int i=0;i<tre[r].size();i++)
	{
		int v=tre[r][i];
		if (!vis[v])
		{
			tarjan(v);
			fa[v]=r;
		}
	}
	for (int i=0;i<query[r].size();i++)
	{
		node q=query[r][i];
		if (vis[q.to])
		{
			ans[q.id]=find(q.to);
		}
	}
} 
int main()
{
	cin>>n>>m>>s;
	for (int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		tre[x].push_back(y);
		tre[y].push_back(x);
	}
	for (int i=1;i<=m;i++)
	{
		int x,y;
		node qn;
		cin>>x>>y;
		qn.to=x;
		qn.id=i;
		query[y].push_back(qn);
		qn.to=y;
		query[x].push_back(qn);	
	}
	for (int i=1;i<=n;i++)	fa[i]=i;
	tarjan(s);
	for (int i=1;i<=m;i++)
	{
		cout<<ans[i]<<endl;
	}
} 

  

标签:tarjan,int,LCA,back,fa,maxn,P3379,qn
From: https://www.cnblogs.com/smghj/p/16870885.html

相关文章

  • vue fullcalendar月周日历
    参考https://fullcalendar.io/demoshttps://www.cnblogs.com/czk1634798848/p/13386178.htmlhttps://blog.csdn.net/qq_39863107/article/details/105387879引入了Day.......
  • 【模板】Tarjan
    postedon2022-07-0720:52:49|under模板|source0x00有向图缩点现有一有向图\(G=(V,E)\),称一个点集\(E'\inE\)为强连通分量,当且仅当\(E'\)的任意两点可以互......
  • 【luogu P1600】天天爱跑步(线段树合并)(LCA)
    天天爱跑步题目链接:luoguP1600题目大意有一棵树,给你若干条路径,对于每个点,有一个数x,求出有多少条路径的第x个点是当前点。思路考虑把路径拆成两个部分,向上和向下。......
  • CF487E Tourists(Tarjan,圆方树,树链剖分,线段树)
    CF487ETourists带权无向图\(N,M\),\(Q\)次询问\(s,t\)所有不经过重复点可能路径经过的最小值的最小值。CODE每次修改一个圆点\(u\)周围的方点有点难。可是李神......
  • LCA 的四种求法,你都会了吗?
    回字有四样写法,你知道么?lca,即最近公共祖先,如上图中2和13的lca是1,5和6的lca是2。众所周知,LCA的主流求法有4种。那么,你都会了吗?树链剖分如果你不会......
  • 【XSY2485】MST(最小生成树+倍增lca+并查集)
    题面Description给定一个\(n\)个点\(m\)条边的连通图,保证没有自环和重边。对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成......
  • 【XSY2414】【CF587C】Duff in the Army(倍增lca)
    看到题目中\(a<=0\),自然就想到用暴力维护这个东东。设倍增数组\(fa[u][i]\)和\(minn[u][i]\),其中\(minn\)存的是一个结构体,结构体中包含两个东东:一个数组和这个数组中的元......
  • tarjan
    tarjan算法对无向图连通性的应用:求割点->点双连通分量->缩点建圆方树求割边->边双连通分量->缩点建树tarjan算法对有向图连通性的应用:求强连通分量割点......
  • 【ARC069F】Flags(2-SAT,Tarjan,线段树优化建图)
    注意:本题的点数可以相比题解优化一半。首先先二分答案。然后判断能否使得两两旗子之间的距离都大于\(mid\)。然后发现这是一个2-SAT问题。2-SAT问题:通俗地说,有\(......
  • tarjan
    tarjan还记得寒假集训没好好学\(tarjan\),一直就不咋会,所以趁着考前重新学了一下。\(tarjan\)的基本运用主要有:\(1.\)有向图中将若干点缩成一个点,建出一个\(DAG\),搭......