POJ1330 Nearest Common Ancestors 非lca pascal 解题报告
2013-12-29 14:48
537 查看
题目大意:在T组数据中(T不知道有多大,题目没有写),每组数据的先给出一个N(2<=N<=10000),之后再数据中N-1行为边的信息,每组数据的第N行给出一个询问,然后输出他们的最小公共祖先。
一开始打算直接用lca做的,但是对比一下lca和暴力的空间和时间,感觉还是有那么一点点的差距,所以就没用lca,直接暴力。其实思路很简单,对于每一对连通信息X Y,我们用一个数组将y的父节点设为x就可以了,读入询问之后,先对其中一个进行一次遍历,其中用一个布尔数组进行标记,直到父节点为空为止,再把剩下的扫一次,如果碰到一个点为true就输出那个点。这种方法只适合用于数据比较小和询问不多的题,其他还是老老实实的用lca吧。
代码:
var
a:array[1..10000] of integer;
i,j,n,t,x,y,k:integer;
b:array[1..10000] of boolean;
begin
readln(t);
for i:=1 to t do
begin
fillchar(a,sizeof(a),0);
readln(n);
for j:=1 to n-1 do
begin
readln(x,y);
a[y]:=x; //存储父节点
end;
readln(x,y);
fillchar(b,sizeof(b),false);
b[x]:=true;
repeat
k:=x;
b[k]:=true;
x:=a[k];
until x=0; //遍历
repeat
k:=y;
if b[k] then begin writeln(k); break; end else b[k]:=true; //查找
y:=a[k];
until y=0;
end;
end.
一开始打算直接用lca做的,但是对比一下lca和暴力的空间和时间,感觉还是有那么一点点的差距,所以就没用lca,直接暴力。其实思路很简单,对于每一对连通信息X Y,我们用一个数组将y的父节点设为x就可以了,读入询问之后,先对其中一个进行一次遍历,其中用一个布尔数组进行标记,直到父节点为空为止,再把剩下的扫一次,如果碰到一个点为true就输出那个点。这种方法只适合用于数据比较小和询问不多的题,其他还是老老实实的用lca吧。
代码:
var
a:array[1..10000] of integer;
i,j,n,t,x,y,k:integer;
b:array[1..10000] of boolean;
begin
readln(t);
for i:=1 to t do
begin
fillchar(a,sizeof(a),0);
readln(n);
for j:=1 to n-1 do
begin
readln(x,y);
a[y]:=x; //存储父节点
end;
readln(x,y);
fillchar(b,sizeof(b),false);
b[x]:=true;
repeat
k:=x;
b[k]:=true;
x:=a[k];
until x=0; //遍历
repeat
k:=y;
if b[k] then begin writeln(k); break; end else b[k]:=true; //查找
y:=a[k];
until y=0;
end;
end.
相关文章推荐
- POJ-1330-Nearest Common Ancestors 解题报告
- POJ 1330 Nearest Common Ancestors(在线倍增LCA)
- POJ 1330 Nearest Common Ancestors 在线LCA
- POJ 1330 Nearest Common Ancestors【LCA】
- POJ1330 Nearest Common Ancestors[LCA]
- poj 1330 Nearest Common Ancestors LCA targin
- poj 1330 Nearest Common Ancestors 单次LCA/DFS
- POJ1330 Nearest Common Ancestors(最近公共祖先LCA 并查集+DFS)
- 【POJ1330】Nearest Common Ancestors(树链剖分求LCA)
- POJ 1330 Nearest Common Ancestors【LCA】
- POJ - 1330 Nearest Common Ancestors(LCA tarjan)
- POJ-1330 Nearest Common Ancestors(lca模板题)
- [置顶] poj-1330-Nearest Common Ancestors-LCA(RMQ)
- POJ 1330 Nearest Common Ancestors(tarjan LCA 算法)
- POJ 1330 Nearest Common Ancestors (LCA)
- POJ - 1330 Nearest Common Ancestors(LCA最近公共祖先 朴素算法&倍增法)
- poj 1330 Nearest Common Ancestors(LCA入门题)
- POJ 1330 Nearest Common Ancestors(LCA)
- poj-1330-Nearest Common Ancestors-LCA(RMQ)
- POJ1330 Nearest Common Ancestors【最近公共祖先】【Tarjan-LCA算法】