Cod sursa(job #997361)

Utilizator StanAndreiAndrei Stan StanAndrei Data 13 septembrie 2013 21:40:53
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#include <vector>

#define NMAX 250005
#define MMAX 300005

using namespace std;

vector<int> G[NMAX],A[NMAX];
bool viz[NMAX];
int N,M,P,Q;

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

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

void dfs(int p,int start)
{
    A[start].push_back(p);
    viz[p]=1;

    int j;
    for (j=0;j<G[p].size();j++)
        if (!viz[G[p][j]])
            dfs(G[p][j],start);
}

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

void pre()
{
    int i;
    for (i=1;i<=N;i++)
    {
        clear();
        dfs(i,i);
    }
}

void query()
{
    int i;
    for (i=1;i<=M;i++)
    {
        scanf("%d %d\n",&Q,&P);
        if (A[Q][P]<=N) printf("%d\n",A[Q][P]);
        else printf("0\n");
    }
}

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

    read();
    pre();
    query();

    fclose(stdin);
    fclose(stdout);
    return 0;
}