Cod sursa(job #1601705)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 16 februarie 2016 10:39:52
Problema Stramosi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,i,m,j,v[250001];
vector <int> l[250001];
vector <int> t[250001];
queue <int> q;
void dfs(int nod, int val)
{
    t[val].push_back(nod);
    v[nod]=val;
    for(int i=0;i<l[nod].size();i++)
        dfs(l[nod][i],val+1);
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        {
            int a;
            f>>a;
            l[a].push_back(i);
        }
    dfs(0,0);
    for(int i=1;i<=m;i++)
    {
        int a,b;
        f>>a>>b;
        if(v[a]-b<1) g<<0<<"\n";
        else
        {
            int ok=1;
            if(t[v[a]-b][t[v[a]-b].size()-1]<a) g<<t[v[a]-b][t[v[a]-b].size()-1]<<"\n",ok=0;
            else
            for(int j=t[v[a]-b].size()-1;j>=1&&ok==1;j--)
                if(t[v[a]-b][j]>a&&t[v[a]-b][j-1]<a)
                g<<t[v[a]-b][j-1]<<"\n",ok=0;
        }
    }
    return 0;
}