(C++)白駿3584最近の共通祖先


https://www.acmicpc.net/problem/3584
簡単な木の問題...
まず、ノードxの親ノードを返す関数findParent(int x)を定義し、次のように記述します.
親ノードを
  • アレイに格納する.
  • 最後の2つの所与のノードの親ノードfindParentを検索し、各ノードはベクトルに
  • を格納する.
    2つのベクトル
  • を比較して、同じ値
  • を検索します.
    #include <iostream>
    #include <vector>
    #include <cstring>
    using namespace std;
    
    
    int T,N;
    int node[10005]; // memorize parent node
    int x,y,A,B;
    int ans;
    int root;
    
    int findParent(int x){
        return node[x];
    }
    
    int main(){
    
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
    
        cin>>T;
        while(T--){
            cin>>N;
    
            memset(node, 0, sizeof(node));
            for(int i=0; i<N-1; i++) {
                cin>>x>>y;
                node[y]=x;
            }
    
            for(int i=1; i<=N; i++){
                if(node[i]==0){
                    root=i;
                    break;
                }
            }
    
            cin>>A>>B;
    
            vector<int> nodeA;
            vector<int> nodeB;
    
            while(A!=0 || B!=0) {
    
                if(A!=0){
                    nodeA.push_back(A);
                    A = findParent(A);
                }
                if(B!=0){
                    nodeB.push_back(B);
                    B = findParent(B); 
                }
            }
    
    
            bool flag=false;
            for(int i=0; i<nodeA.size(); i++){
                for(int j=0; j<nodeB.size(); j++){
                    if(nodeA[i]==nodeB[j]) {
                        ans=nodeA[i];
                        flag=true;
                    }
                }
                if(flag) break;
            }
    
            if(ans==0) ans=root;
            cout<<ans<<'\n';
        }
    
    }