Cod sursa(job #1343858)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 15 februarie 2015 23:26:32
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<iostream>
#include<fstream>
#include<vector>
#define NMAX 250001
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector<int>v[NMAX];
vector<int>el;
vector<bool>uz(NMAX,false);
int n,m,len=0;
int first[NMAX];
void read()
{
    fin>>n>>m;
    int tata;
    for(int i=1;i<=n;i++)
    {
        fin>>tata;
        if(tata)
        v[tata].push_back(i);
    }
}
void dfs(int x)
{
    len++;
    first[x]=len;
    uz[x]=true;
    el.push_back(x);
    for(int i=0;i<v[x].size();i++)
    {
        if(!uz[v[x][i]])
        {
            dfs(v[x][i]);
            len++;
            el.push_back(x);
        }
    }
}
void construct()
{    el.push_back(0);
    for(int i=1;i<=n;i++)
    {if(!uz[i])
       {dfs(i);
       len++;el.push_back(0);}
}}
void det(int nod,int care)
{
    int ct=0;
    while(el[first[nod]-1]!=0&&ct<care)
    {
        ct++;
        nod=el[first[nod]-1];

    }
    if(ct==care)
        fout<<nod<<'\n';
    else
        fout<<"0"<<'\n';

}
void solve()
{   int nod,st;
    for(int i=1;i<=m;i++)
    {
        fin>>nod>>st;
        det(nod,st);
    }
}
int main()
{
    read();
    construct();
    solve();
   fin.close();
   fout.close();
    return 0;
}