Cod sursa(job #808248)

Utilizator TodeaDariustodea darius TodeaDarius Data 6 noiembrie 2012 15:45:24
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define nmax 250005
#define mmax 300005
int n,m,r[mmax],st[nmax];
struct nod
{
    int inf;
    nod *adr;
} *v[nmax];
struct intr
{
    int nr,s;intr *adr;
} *x[mmax];
void citire()
{
    f>>n>>m;
    int z,k,l;
    for(int i=1;i<=n;i++)
    {
        f>>z;
        nod *p=new nod;
        p->inf=i;
        p->adr=v[z];
        v[z]=p;
    }
    for(int 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-p->s>0)
            r[p->nr]=st[niv-p->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->inf,niv+1);
}
void afisare()
{
    for(int i=1;i<=m;i++)
        g<<r[i]<<'\n';
}
int main()
{
    citire();
    for(nod *p=v[0];p!=NULL;p=p->adr)
        dfs(p->inf,1);
    afisare();
    return 0;
}