Cod sursa(job #1232023)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 21 septembrie 2014 21:41:25
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

struct nod
{
    int inf1,inf2;
    nod *urm;
};

struct nd
{
    int inf;
    nd *urm;
};

int n,m,a[250010],r[300010],st[250010],vf;
nod *l[300010];
nd *lst[300010];

void citire()
{
    int x,y;
    nod *p;
    nd *q;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        q=new nd;
        q->inf=i;
        q->urm=lst[x];
        lst[x]=q;
    }
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        p=new nod;
        p->inf1=i;
        p->inf2=y;
        p->urm=l[x];
        l[x]=p;
    }
}

void dfs(int k)
{
    st[++vf]=k;
    int x;
    x=st[vf];
    for(nod *p=l[x];p;p=p->urm)
    {
        if(vf-p->inf2>1)
            r[p->inf1]=st[vf-p->inf2];
        else
            r[p->inf1]=0;
    }
    for(nd *p=lst[x];p;p=p->urm)
        dfs(p->inf);
    st[vf--]=0;
}

void afisare()
{
    for(int i=1;i<=m;i++)
        fout<<r[i]<<"\n";
}

int main()
{
    citire();
    dfs(0);
    afisare();
    return 0;
}