**POJ 1330:nearest Common Ancestors**
**Time limit:1000ms Memory LIMIT:32MB**

**Description**

A rooted tree is a well-known data structure in computer science and engineering. An example is shown below:

In the figure, each node is a labeled with a integer from {1, 2,..., 16}. Node 8 is the root of the tree. Node x is a ancestor of node y if node x is in the path between the root and node Y. For example, node 4 was an ancestor of node 16. Node also an ancestor of node 16. As a matter of fact, nodes 8, 4, 16, and + are the ancestors of the node. Remember that a node was an ancestor of itself. Nodes 8, 4, 6, and 7 are the ancestors of node 7. A node x is called a common ancestor of the different nodes Y and z if node X is an ancestor of node Y and an ancestor of Node Z. Thus, nodes 8 and 4 are the common ancestors of nodes and 7. A node x is called the nearest common ancestor of nodes Y and Z if x are a common ancestor of Y and Z and nearest to Y and Z among their common ancestors. Hence, the nearest common ancestor of nodes and 7 is node 4. Node 4 is nearer-nodes and 7 than node 8 is.

For other examples, the nearest common ancestor of nodes 2 and 3 are node, the nearest common ancestor of nodes 6 and 13 is node 8, and the nearest common ancestor of nodes 4 and are node 4. The last example, if Y is a ancestor of Z, then the nearest common ancestor of Y and Z are y.

Write A program This finds the nearest common ancestor of the distinct nodes in a tree.

**Input**

The input consists of T test cases. The number of test cases (T) is given on the first line of the input file. Each test case is starts with a line containing an integer N and the number of nodes in a tree, 2<=n<=10,000. The nodes is labeled with integers 1, 2,..., N. Each of the next N-1 lines contains a pair of integers this represent an edge--the first integer is the parent node of T He second integer. Note that a tree with N nodes have exactly N-1 edges. The last line of all test case contains, distinct integers whose nearest common ancestor are to be computed.

**Output**

Print exactly one line for each test case. The line should contain the "the integer" is the nearest common ancestor.

**Sample Input**

2161 148 510 165 94 68 44 101 136 1510 116 710 216 38 116 1216 752 33 43 11 53 5

**Sample Output**

43

**Source**

Taejon 2002" The Puzzle"is LCA, the nearest public ancestor, the simplest method I have used every time O (N)is to always find the root along a point and then mark it all. It is an LCA to find a marked place along another point.

1#include <stdio.h>2#include <string.h>3 using namespacestd;4 intfa[10001];5 BOOLvx[10001];6 intMain () {7 intT;8scanf"%d",&T);9 while(t--) {Ten intN;SCANF ("%d",&n); Onememset (fa,-1,sizeof(FA)); Amemset (VX,0,sizeof(VX)); - for(intI=1; i<=n-1;++i) { - intA,B;SCANF ("%d%d",&a,&b); thefa[b]=A; - } - intu,v; -scanf"%d%d",&u,&v); + while(u!=-1) { -vx[u]=1; +u=Fa[u]; A } at while(!vx[v]) v=Fa[v]; -printf"%d\n", V); - } - return 0; -}

View Code

[POJ 1330] Nearest Common Ancestors (Naïve method)