LCA(Tarjan)
- program LCA(Tarjan);
- type arr=record
- u,v,w,next:longint;
- end;
- const maxn=;
- maxm=;
- var eg:array[..maxm*] of arr;
- last,lasq,ans,fa:array[..maxn] of longint;
- flag:array[..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<>- 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<>- do
- begin
- v:=eg[i].v;
- if flag[v] and (ans[eg[i].w]=-) then
- ans[eg[i].w]:=find(v);
- i:=eg[i].next;
- end;
- end;
- begin
- for i:= to maxn do begin last[i]:=-; lasq[i]:=-; end;
- j:=-;
- readln(n,q);
- for i:= to n- do
- begin
- readln(x,y);
- add(x,y);
- add(y,x);
- end;
- for i:= to q do
- begin
- readln(x,y);
- adt(x,y,i);
- adt(y,x,i);
- ans[i]:=-;
- end;
- fillchar(flag,sizeof(flag),false);
- for i:= to n do fa[i]:=i;
- flag[]:=true;
- lca();
- for i:= to q do writeln(ans[i]);
- end.
LCA(Tarjan)的更多相关文章
- LCA (Tarjan&倍增)
LCA_Tarjan 参考博客:https://www.cnblogs.com/JVxie/p/4854719.html LCA的Tarjan写法需要结合并查集 从叶子节点往上并 int Find ( ...
- LCA(tarjan)
这是LCA算法中的一种,Tarjan算法 其实这么说也有点不对,应该是Tarjan+DFS进行解决 LCA又称为最近公共祖先 那么什么是最近公共祖先: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖 ...
- POJ 1986 Distance Queries 【输入YY && LCA(Tarjan离线)】
任意门:http://poj.org/problem?id=1986 Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total ...
- LCA(Tarjan算法)模板
一.查询一组的LCA Nearest Common Ancestors A rooted tree is a well-known data structure in computer science ...
- H - Rescue the Princess ZOJ - 4097 (tarjan缩点+倍增lca)
题目链接: H - Rescue the Princess ZOJ - 4097 学习链接: zoj4097 Rescue the Princess无向图缩点有重边+lca - lhc..._博客园 ...
- LCA(最近公共祖先)--tarjan离线算法 hdu 2586
HDU 2586 How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 最近公共祖先(LCA)---tarjan算法
LCA(最近公共祖先).....可惜我只会用tarjan去做 真心感觉tarjan算法要比倍增算法要好理解的多,可能是我脑子笨吧略略略 最近公共祖先概念:在一棵无环的树上寻找两个点在这棵树上深度最大的 ...
- Tarjan算法离线 求 LCA(最近公共祖先)
本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...
- POJ 1236 Network of Schools(tarjan算法 + LCA)
这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...
随机推荐
- json2.js 使用
参考:http://www.cnblogs.com/youring2/archive/2013/03/01/2938850.html github地址:https://github.com/dougl ...
- sql 语句随机时间存储过程
CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) ...
- UB单修改
FUNCTION Z_SD_UB_CHANGE. *"-------------------------------------------------------------------- ...
- SQL Server数据库(SQL Sever语言 CRUD)
使用SQL Sever语言进行数据库的操作 常用关键字identity 自增长primary key 主键unique 唯一键not null 非空references 外键(引用) 在使用查询操作数 ...
- 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 ...
- cordova 5.0 白名单
最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...
- Oracle合并函数内容
--MINUS去差集,取第一个集合有的而第二集合没有的,并以第一个字段排序select t.bumenbm from T_HQ_BM t minus select b.bumenbm from t_h ...
- bzoj 1816: [Cqoi2010]扑克牌
#include<cstdio> #include<iostream> using namespace std; ],ans; bool pan(int x) { int a1 ...
- HDU 4405 Aeroplane chess 概率DP 难度:0
http://acm.hdu.edu.cn/showproblem.php?pid=4405 明显,有飞机的时候不需要考虑骰子,一定是乘飞机更优 设E[i]为分数为i时还需要走的步数期望,j为某个可能 ...
- hdu 4622 Reincarnation
http://acm.hdu.edu.cn/showproblem.php?pid=4622 用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上 把所用的串对应的整数放在一个数组里 ...