Cod sursa(job #1305301)

Utilizator Vele_GeorgeVele George Vele_George Data 29 decembrie 2014 18:12:02
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream f("stramosi.in");
ofstream go("stramosi.out");


struct stramos
{
    int fiu,dist;
};


vector<vector<int> > g;
vector<int> T;
vector<bool> F;
vector<stramos> S;

void gen(int x)       // Frunze.size()*logN
{
    int aux=T[x],l=1;
    while(aux!=0)
    {
        g[x].push_back(aux);
        S[aux].fiu=x;
        S[aux].dist=l++;
        aux=T[aux];
    }
}


int main()
{
    int n,m,x,y;

    f>>n>>m;
    T.resize(n+1);
    g.resize(n+1);
    F.resize(n+1);
    S.resize(n+1);

    for(int i=1; i<=n; i++)
    {
        F[i]=true;
        S[i].fiu=i;
        S[i].dist=0;
    }

    for(int i=1; i<=n; i++)
    {
        f>>T[i];
        F[T[i]]=false;
    }

    for(int i=1; i<=n; i++)
    {
        if (F[i]) gen(i);
    }

    for(int i=0; i<m; i++)
    {
        f>>x>>y;
        y=y+S[x].dist-1;
        x=S[x].fiu;

        if (g[x].size()>y) go<<g[x][y]<<"\n";
        else go<<"0\n";
    }

    f.close();
    go.close();
    return 0;
}