码迷,mamicode.com
首页 > 其他好文 > 详细

Tarjan求LCA模板

时间:2016-05-30 20:01:45      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

 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模板

标签:

原文地址:http://www.cnblogs.com/Kurokey/p/5543657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!