Cod sursa(job #2287027)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 21 noiembrie 2018 13:08:36
Problema Lowest Common Ancestor Scor 0
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int parinte(int a,vector<int> v,int n)
{
    return v[a];
}
int LCA(int a,int b, vector<int> v,int n)
{
    int t,s,p,q,min=99999999,k=0;
    if(v[a]==v[b])
    {
        return v[a];
    }
    else
    {
       t=a;
       k=0;
       while(v[t]!=v[b])
       {
           t=parinte(t,v,n);
           k++;
       }
       if(k<min)
       {
           min=k;
       }
       s=b;
       k=0;
       while(v[s]!=v[a])
       {
           s=parinte(s,v,n);
           k++;
       }
       if(k<min)
       {
           min=k;
       }
       p=a;
       q=b;
       k=0;
       while(v[p]!=v[q])
       {
           p=parinte(p,v,n);
           q=parinte(q,v,n);
           k++;
       }
       if(k<min)
       {
           min=k;
       }
       return min;
    }
}
int main()
{
    ifstream fin("lca.in");
    ofstream fout("lca.out");
    vector<int> v;
    int a,b,n,m,i,nr;
    fin>>n>>m;
    for(i=2;i<=n;i++)
    {
        fin>>nr;
        v.push_back(nr);
    }
    for(i=1;i<=m;i++)
    {
        fin>>a>>b;
        fout<<LCA(a,b,v,n)<<endl;
    }
    fin.close();
    fout.close();
    return 0;
}