zoukankan      html  css  js  c++  java
  • POJ 1330 Nearest Common Ancestors(Tree)

           题目:Nearest Common Ancestors

      根据输入建立树,然后求2个结点的最近共同祖先。

      注意几点:

      (1)记录每个结点的父亲,比较层级时要用;

      (2)记录层级;

      (3)记录每个结点的孩子,vector<int> v[M]写在主函数里面,放在外面超时

    代码:

    #include<iostream>
    #include<vector>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    
    const int M = 10001;  
    //vector<int> v[M];
    int level[M];
    int father[M];
    
    void visitEveryone(vector<int> v[], int one, int _level)
    {
        level[one] = _level;
        for(vector<int>::iterator it = v[one].begin(); it != v[one].end(); ++it)
        {
            visitEveryone(v, *it, _level+1);
        }
    }
    
    int main()
    {
        int T,N,a,b,i,j;
        scanf("%d", &T);
        while(T--)
        {
            vector<int> v[M];
            scanf("%d", &N);
            memset(father, 0, (N+1)*sizeof(int));
            for(i = 1; i < N; ++i)
            {
                scanf("%d %d", &a, &b);
                father[b] = a;
                v[a].push_back(b);
            }
            scanf("%d %d", &a, &b);
            for(j=1; father[j] > 0 && j <= N; ++j);
    
            visitEveryone(v, j, 0);        
            
            while(a != b)
            {
         
                if(level[a] < level[b])
                    b = father[b];
                else
                    a = father[a];
            }         
     
            printf("%d
    ",a);
        }
        return 0;
    }
  • 相关阅读:
    pku3225 区间
    pku2136 Vertical Histogram
    NOI2006 最大获利
    APIO2010 特别行动队
    停电两夜
    偷偷乐一把
    那些花儿...
    一件一块钱的小事
    web service 的Section=ResponseStatusLine 错误和skype
    杂谈
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/4170379.html
Copyright © 2011-2022 走看看