Cod sursa(job #2693300)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 5 ianuarie 2021 14:20:39
Problema Lowest Common Ancestor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include<fstream>

using namespace std;

int t[100001], c[100001], cont[100001];
int main() {
    int n, m, i, j, root, x, p, a, b, ok;

    ifstream fin("lca.in");
    ofstream fout("lca.out");
    fin>>n>>m;
    for(i=1;i<=n-1;i++) {
            fin>>x;
          t[i+1]=x;
    }
   root=1;
   t[1]=1;
    for(i=1;i<=m;i++) {
        fin>>a>>b;
        if(a==t[b]) {
             fout<<a<<"\n";
        }
        else if(b==t[a] || a==b) {
                fout<<b<<"\n";
        }
        else if(a==1 || b==1) {
            fout<<"1\n";
        }
        else {
        ok=1;
        while(ok==1) {
            a=t[a];
        cont[a]++;
        if(a==root) {
                ok=0;
        }
        }
        ok=1;
       int findd=0;
       if(cont[b]==1) {
        fout<<b<<"\n";
       }
           else {
       while(ok==1){
            b=t[b];
       if(cont[b]!=0) {
                        findd=b;
                         ok=0;
                }
           if(b==root) {
                        ok=0;
           }
        }
        fout<<findd<<"\n";
        }
       }
        for(j=1;j<=n;j++) {
                cont[j]=0;
        }
    }
    return 0;
}