1. program LCA(Tarjan);
  2. type arr=record
  3. u,v,w,next:longint;
  4. end;
  5. const maxn=;
  6. maxm=;
  7. var eg:array[..maxm*] of arr;
  8. last,lasq,ans,fa:array[..maxn] of longint;
  9. flag:array[..maxn] of boolean;
  10. n,i,j,q,x,y:longint;
  11. procedure add(u,v:longint);
  12. begin
  13. inc(j);
  14. eg[j].u:=u;
  15. eg[j].v:=v;
  16. eg[j].next:=last[u];
  17. last[u]:=j;
  18. end;
  19. procedure adt(u,v,w:longint);
  20. begin
  21. inc(j);
  22. eg[j].u:=u;
  23. eg[j].v:=v;
  24. eg[j].w:=w;
  25. eg[j].next:=last[u];
  26. lasq[u]:=j;
  27. end;
  28. function find(x:longint):longint;
  29. begin
  30. if fa[x]=x then exit(x);
  31. fa[x]:=find(fa[x]);
  32. exit(fa[x]);
  33. end;
  34. procedure lca(u:longint);
  35. var v,i:longint;
  36. begin
  37. i:=last[u];
  38. while i<>- do
  39. begin
  40. v:=eg[i].v;
  41. if not flag[v] then
  42. begin
  43. flag[v]:=true;
  44. lca(v); fa[v]:=u;
  45. end;
  46. i:=eg[i].next;
  47. end;
  48. i:=lasq[u];
  49. while i<>- do
  50. begin
  51. v:=eg[i].v;
  52. if flag[v] and (ans[eg[i].w]=-) then
  53. ans[eg[i].w]:=find(v);
  54. i:=eg[i].next;
  55. end;
  56. end;
  57. begin
  58. for i:= to maxn do begin last[i]:=-; lasq[i]:=-; end;
  59. j:=-;
  60. readln(n,q);
  61. for i:= to n- do
  62. begin
  63. readln(x,y);
  64. add(x,y);
  65. add(y,x);
  66. end;
  67. for i:= to q do
  68. begin
  69. readln(x,y);
  70. adt(x,y,i);
  71. adt(y,x,i);
  72. ans[i]:=-;
  73. end;
  74. fillchar(flag,sizeof(flag),false);
  75. for i:= to n do fa[i]:=i;
  76. flag[]:=true;
  77. lca();
  78. for i:= to q do writeln(ans[i]);
  79. end.

LCA(Tarjan)的更多相关文章

  1. LCA (Tarjan&倍增)

    LCA_Tarjan 参考博客:https://www.cnblogs.com/JVxie/p/4854719.html LCA的Tarjan写法需要结合并查集 从叶子节点往上并 int Find ( ...

  2. LCA(tarjan)

    这是LCA算法中的一种,Tarjan算法 其实这么说也有点不对,应该是Tarjan+DFS进行解决 LCA又称为最近公共祖先 那么什么是最近公共祖先: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...

  3. POJ 1986 Distance Queries 【输入YY && LCA(Tarjan离线)】

    任意门:http://poj.org/problem?id=1986 Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total ...

  4. LCA(Tarjan算法)模板

    一.查询一组的LCA Nearest Common Ancestors A rooted tree is a well-known data structure in computer science ...

  5. H - Rescue the Princess ZOJ - 4097 (tarjan缩点+倍增lca)

    题目链接: H - Rescue the Princess  ZOJ - 4097 学习链接: zoj4097 Rescue the Princess无向图缩点有重边+lca - lhc..._博客园 ...

  6. LCA(最近公共祖先)--tarjan离线算法 hdu 2586

    HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  7. 最近公共祖先(LCA)---tarjan算法

    LCA(最近公共祖先).....可惜我只会用tarjan去做 真心感觉tarjan算法要比倍增算法要好理解的多,可能是我脑子笨吧略略略 最近公共祖先概念:在一棵无环的树上寻找两个点在这棵树上深度最大的 ...

  8. Tarjan算法离线 求 LCA(最近公共祖先)

    本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...

  9. POJ 1236 Network of Schools(tarjan算法 + LCA)

    这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...

随机推荐

  1. json2.js 使用

    参考:http://www.cnblogs.com/youring2/archive/2013/03/01/2938850.html github地址:https://github.com/dougl ...

  2. sql 语句随机时间存储过程

    CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) ...

  3. UB单修改

    FUNCTION Z_SD_UB_CHANGE. *"-------------------------------------------------------------------- ...

  4. SQL Server数据库(SQL Sever语言 CRUD)

    使用SQL Sever语言进行数据库的操作 常用关键字identity 自增长primary key 主键unique 唯一键not null 非空references 外键(引用) 在使用查询操作数 ...

  5. 421. Maximum XOR of Two Numbers in an Array——本质:利用trie数据结构查找

    Given a non-empty array of numbers, a0, a1, a2, - , an-1, where 0 ≤ ai < 231. Find the maximum re ...

  6. cordova 5.0 白名单

    最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...

  7. Oracle合并函数内容

    --MINUS去差集,取第一个集合有的而第二集合没有的,并以第一个字段排序select t.bumenbm from T_HQ_BM t minus select b.bumenbm from t_h ...

  8. bzoj 1816: [Cqoi2010]扑克牌

    #include<cstdio> #include<iostream> using namespace std; ],ans; bool pan(int x) { int a1 ...

  9. HDU 4405 Aeroplane chess 概率DP 难度:0

    http://acm.hdu.edu.cn/showproblem.php?pid=4405 明显,有飞机的时候不需要考虑骰子,一定是乘飞机更优 设E[i]为分数为i时还需要走的步数期望,j为某个可能 ...

  10. hdu 4622 Reincarnation

    http://acm.hdu.edu.cn/showproblem.php?pid=4622 用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上 把所用的串对应的整数放在一个数组里 ...