• tarjan-LCA模板


    洛谷P3379

     1 #include <cstdio>
     2 
     3 using namespace std;
     4 
     5 const int max_n=5000050;
     6 
     7 struct etype{
     8     int t,next;
     9 };
    10 struct qtype{
    11     int t,next,id;
    12 };
    13 
    14 etype e[2*max_n];
    15 qtype q[2*max_n];
    16 int a[max_n],b[max_n],ans[max_n],fa[max_n];
    17 bool vis[max_n];
    18 int cnt;
    19 
    20 void addedge(int u,int v)
    21 {
    22     cnt++;
    23     e[cnt].t=v;e[cnt].next=a[u];a[u]=cnt;
    24 }
    25 
    26 void addquery(int i,int u,int v)
    27 {
    28     cnt++;
    29     q[cnt].t=v;q[cnt].id=i;q[cnt].next=b[u];b[u]=cnt;
    30 }
    31 
    32 int findfather(int k)
    33 {
    34     if (fa[k]==k) return k;
    35     fa[k]=findfather(fa[k]);
    36     return fa[k];
    37 }
    38 
    39 void dfs(int k)
    40 {
    41     fa[k]=k;vis[k]=true;
    42     int i=b[k];
    43     while (i>0)
    44     {
    45         if (vis[q[i].t])
    46         {
    47             if (ans[q[i].id]==0) ans[q[i].id]=findfather(q[i].t);
    48         }
    49         i=q[i].next;
    50     }
    51     i=a[k];
    52     while (i>0)
    53     {
    54         if (!vis[e[i].t])
    55         {
    56             dfs(e[i].t);
    57             fa[e[i].t]=k;
    58         }
    59         i=e[i].next;
    60     }
    61 }
    62 int main()
    63 {
    64     int n,m,s;
    65     scanf("%d%d%d",&n,&m,&s);
    66     for (int i=1;i<=n;i++) a[i]=0;
    67     cnt=0;
    68     for (int i=1;i<n;i++)
    69     {
    70         int x,y;
    71         scanf("%d%d",&x,&y);
    72         addedge(x,y);addedge(y,x);
    73     }
    74     for (int i=1;i<=n;i++) b[i]=0;
    75     cnt=0;
    76     for (int i=1;i<=m;i++)
    77     {
    78         int x,y;
    79         scanf("%d%d",&x,&y);
    80         addquery(i,x,y);addquery(i,y,x);
    81     }
    82     for (int i=1;i<=n;i++) vis[i]=false;
    83     for (int i=1;i<=m;i++) ans[i]=0;
    84     dfs(s);
    85     for (int i=1;i<=m;i++) printf("%d
    ",ans[i]);
    86     return 0;
    87 }
  • 相关阅读:
    JVM
    Java反射和动态代理
    JMS(Java消息服务)
    Java多线程及并发
    zookeeper集群自动启动脚本
    zookeeper命令行客户端
    Zookeeper集群搭建步骤及相关知识点深入了解
    MySQL server PID file could not be found!
    Linux下jdk、Tomcat、MySQL的安装
    修改Linux的基本配置
  • 原文地址:https://www.cnblogs.com/Currier/p/11537698.html
Copyright © 2020-2023  润新知