Cod sursa(job #2378572)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 12 martie 2019 13:51:40
Problema Lowest Common Ancestor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
FILE *f,*g;
int arb[200002];
struct graph
{
    int node,next;
}v[200002];
int start[100002],st[200002],been[100002],rang[100002];
int n,m;
void read()
{   int y,k=0;
    fscanf(f,"%d %d",&n,&m);
    for(int i=2; i<=n; i++)
    {
        fscanf(f,"%d",&y);
        v[++k].node=y;
        v[k].next=start[i];
        start[i]=k;

        v[++k].node=i;
        v[k].next=start[y];
        start[y]=k;
    }
}
int minim(int a,int b)
{
    return a<b ? a:b;
}
void build(int node, int stg,int dr)
{
    if(stg==dr)
    {
        arb[stg]=st[stg];
        return;
    }
    int mij=(stg+dr)/2;
    build(2*node, stg, mij);
    build(2*node+1, mij+1, dr);
    arb[node]=minim(arb[2*node],arb[2*node+1]);
}
int query()
void euler(int nod)
{   int ok;
    st[++st[0]]=nod;
    if(!poz[nod])
        poz[nod]=st[0];
    been[nod]=1;
    ok=0;
    for(int i=start[nod]; i; i=v[i].next)
    {
        if(!been[v[i].node])
        {
            ok=1;
            rang[v[i].node]=rang[nod]+1;
            euler(v[i].node);
            st[++st[0]]=nod;
        }
    }
}
void solve()
{
    euler(1);
    /*for(int i=1; i<=st[0]; i++)
        fprintf(g,"%d ",st[i]);
    fprintf(g,"\n");
    for(int i=1; i<=st[0]; i++)
        fprintf(g,"%d ",rang[st[i]]);*/

    for(int l=1; l<=m; l++)
    {
        fscanf(f,"%d %d",&a,&b);

    }
}
int main()
{
    f=fopen("lca.in","r");
    g=fopen("lca.out","w");
    read();
    solve();
    //write();
    fclose(f);
    fclose(g);
    return 0;
}