• LCA(Tarjan)


    program LCA(Tarjan);
    type arr=record
         u,v,w,next:longint;
         end;
    const maxn=100008;
          maxm=100008;
    var eg:array[0..maxm*4] of arr;
        last,lasq,ans,fa:array[0..maxn] of longint;
        flag:array[0..maxn] of boolean;
        n,i,j,q,x,y:longint;
    procedure add(u,v:longint);
    begin
      inc(j);
      eg[j].u:=u;
      eg[j].v:=v;
      eg[j].next:=last[u];
      last[u]:=j;
    end;
    procedure adt(u,v,w:longint);
    begin
      inc(j);
      eg[j].u:=u;
      eg[j].v:=v;
      eg[j].w:=w;
      eg[j].next:=last[u];
      lasq[u]:=j;
    end;
    function find(x:longint):longint;
    begin
      if fa[x]=x then exit(x);
      fa[x]:=find(fa[x]);
      exit(fa[x]);
    end;
    procedure lca(u:longint);
    var v,i:longint;
    begin
      i:=last[u];
      while i<>-1 do
        begin
          v:=eg[i].v;
          if not flag[v] then
            begin
              flag[v]:=true;
              lca(v); fa[v]:=u;
            end;    
          i:=eg[i].next;
        end;
      i:=lasq[u];
      while i<>-1 do
        begin
          v:=eg[i].v;
          if flag[v] and (ans[eg[i].w]=-1) then
            ans[eg[i].w]:=find(v);
          i:=eg[i].next;    
        end;
    end;
    begin
      for i:=1 to maxn do begin last[i]:=-1; lasq[i]:=-1; end;
      j:=-1;
      readln(n,q);
     for i:=1 to n-1 do
        begin
          readln(x,y);
          add(x,y);
          add(y,x);
        end;
      for i:=1 to q do
        begin
          readln(x,y);
          adt(x,y,i);
          adt(y,x,i);
          ans[i]:=-1;
        end;
      fillchar(flag,sizeof(flag),false);
      for i:=1 to n do fa[i]:=i;
      flag[1]:=true;
      lca(1);
      for i:=1 to q do writeln(ans[i]);
    end.
  • 相关阅读:
    web单机优化
    html标签
    html基础
    jenkins api
    cobbler api
    Cobbler安装配置简单使用
    ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
    在ubuntu12.04上安装6款顶级漂亮的BURG主题
    Setting up an OpenGL development environment in ubuntu
    c++ list 容器
  • 原文地址:https://www.cnblogs.com/rpSebastian/p/4156172.html
Copyright © 2020-2023  润新知