Cod sursa(job #997362)

Utilizator StanAndreiAndrei Stan StanAndrei Data 13 septembrie 2013 21:42:40
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <list>
#define NMAX 250005
#define MMAX 300005

using namespace std;

int N,M,SOL,COUNT;

list<int> G[NMAX];
bool viz[NMAX];

void read()
{
    scanf("%d %d\n",&N,&M);

    int i,a;
    for (i=1;i<=N;i++)
    {
        scanf("%d ",&a);
        G[i].push_back(a);
    }
}

void dfs(int p,int niv,int P)
{
    list<int>:: iterator it;
    viz[p]=1;
    if (niv==P)
    {
       SOL=p;return;
    }

    for (it=G[p].begin();it!=G[p].end();++it)
        if (viz[*it]<COUNT)
            dfs(*it,niv+1,P);

}

void clear()
{
    int i;
    for (i=1;i<=N;i++) viz[i]=0;
}

int main()
{
    freopen ("stramosi.in","r",stdin);
    freopen ("stramosi.out","w",stdout);
    int i,a,b;

    read();

    for (i=1;i<=M;i++)
    {
        scanf("%d %d\n",&a,&b);
        //clear();
        COUNT++;
        SOL=0;
        dfs(a,0,b);
        printf("%d\n",SOL);
    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}