Tarjan求LCA模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tarjan求LCA模板相关的知识,希望对你有一定的参考价值。

 1 int n,m,hcnt,qcnt;
 2 int sx,sy;
 3 struct Node{
 4     int to,next;
 5 }node[maxn];
 6 struct Query{
 7     int x,ne;
 8     int i;
 9 }query[maxn<<1];
10 int head[maxn],vis[maxn],indu[maxn];
11 int fp[maxn],anc[maxn],que[maxn],ans[maxn<<1];
12 int findp(int x){return fp[x]==x?x:fp[x]=findp(fp[x]);}
13 inline void add(int x,int y){
14     node[hcnt].to=y;node[hcnt].next=head[x];
15     head[x]=hcnt++;
16 }
17 inline void addq(int x,int y,int i){
18     query[qcnt].x=x;query[qcnt].ne=que[y];
19     query[qcnt].i=i;que[y]=qcnt++;
20 }
21 void Un(int x,int y){
22     int xx=findp(x),yy=findp(y);
23     if(xx!=yy) fp[xx]=yy;
24 }
25 void dfs(int x){
26     vis[x]=1;
27     fp[x]=x;
28     for(int i=head[x];~i;i=node[i].next){
29         int e=node[i].to;
30         if(vis[e])continue;
31         dfs(e);
32         Un(x,e);
33         anc[findp(x)]=x;
34     }
35     for(int i=que[x];~i;i=node[i].next){
36         int e=query[i].x;
37         if(vis[e])
38             ans[query[i].i]=anc[findp(e)];
39     }
40 }
41 int main(){
42     int i,j,group,x,y;
43     scanf("%d",&group);
44     while(group--){
45         mst(indu,0);
46         mst(head,-1);
47         mst(que,-1);
48         qcnt=hcnt=0;
49         mst(vis,0);
50         scanf("%d",&n);
51         for(i=1;i<n;++i){
52             scanf("%d%d",&x,&y);
53             ++indu[y];
54             add(x,y);
55             add(y,x);
56         }
57         int Q=1;
58         for(i=0;i<Q;++i){
59             scanf("%d%d",&x,&y);
60             addq(x,y,i);
61             addq(y,x,i);
62         }
63         for(i=1;i<=n;++i)
64             if(!indu[i]){
65                 dfs(i);
66                 break;
67             }
68         for(i=0;i<Q;++i)
69             printf("%d\n",ans[i]);
70     }
71     return 0;
72 }

 

以上是关于Tarjan求LCA模板的主要内容,如果未能解决你的问题,请参考以下文章

tarjan求lca 模板

Tarjan求LCA模板

Tarjan 算法求 LCA / Tarjan 算法求强连通分量

POJ 1470 Closest Common Ancestors (模板题)(Tarjan离线)LCA

poj3694(lca + tarjan求桥模板)

Tarjan求LCA