poj1330Nearest Common Ancestors(水LCA)

http://poj.org/problem?id=1330

这题只有一个询问,将一个节点的向上的标记下,再从另一个节点走一遍,遇到第一个被标记的就是 整个算法的最坏时间复杂度是O(Q*n),Q是询问的次数。

View Code
 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 using namespace std;

 5 int father[10010],f[10010];

 6 int main()

 7 {

 8     int g,i,j,k,n,a,b,t,c,d;

 9     cin>>t;

10     while(t--)

11     {

12         memset(f,0,sizeof(f));

13         cin>>n;

14         for(i = 1; i <= n ; i++)

15         father[i] = i;

16         for(i = 1 ; i < n ; i++)

17         {

18             cin>>a>>b;

19             father[b] = a;

20         }

21         cin>>c>>d;

22         f[c] = 1;

23         g = father[c];

24         f[g] = 1;

25         while(g!=father[g])

26         {

27             g = father[g];

28             f[g] = 1;

29         }

30         while(f[d]==0)

31         {

32             d = father[d];

33         }

34         cout<<d<<endl;

35     }

36     return 0;

37 }

 

你可能感兴趣的:(REST)