Cod sursa(job #808229)

Utilizator marinutzacatana marina marinutza Data 6 noiembrie 2012 15:28:07
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define nmax 250010
#define mmax 300010
int n,m,r[mmax],st[nmax];
struct nod
{
    int nr;
    nod *adr;
} *v[nmax];
struct intr
{
    int nr;
    int s;
    intr *adr;
} *x[nmax];
void cit()
{
    f>>n>>m;
    int z,i,k,l;
    for(i=1;i<=n;i++)
    {
        f>>z;
        nod *p=new nod;
        p->nr=i;
        p->adr=v[z];
        v[z]=p;
    }
    for(i=1;i<=m;i++)
    {
        f>>k>>l;
        intr *p=new intr;
        p->nr=i;
        p->s=l;
        p->adr=x[k];
        x[k]=p;
    }
}
void raspund(int nd,int niv)
{

    for(intr *p=x[nd];p!=NULL;p=p->adr)
    {
        if(niv-x[nd]->s>0)
        {
            r[x[nd]->nr]=st[niv-x[nd]->s];
        }
    }
}
void dfs(int nd,int niv)
{
    st[niv]=nd;
    raspund(nd,niv);
    for(nod *p=v[nd];p!=NULL;p=p->adr)
    {
        dfs(p->nr,niv+1);
    }
}
void afis()
{
    for(int i=1;i<=m;i++)
    g<<r[i]<<'\n';
}
int main()
{
    cit();
    for(nod *p=v[0];p!=NULL;p=p->adr)
    {
        dfs(p->nr,1);
    }
    afis();
    return 0;
}