Cod sursa(job #3041289)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 31 martie 2023 11:13:16
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda tot_ Marime 0.9 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m;
struct pct
{
    int x,poz;
};
vector<pct>a[250005];
vector<int>edge[250005];
int ans[300005];
int niv[250005];
int last[250005];
void dfs(int nod,int tt)
{
    niv[nod]=niv[tt]+1;
    int nivel=niv[nod]-1;
    last[nivel+1]=nod;
    for(auto it: a[nod])
        if(it.x>nivel)
            ans[it.poz]=0;
        else
            ans[it.poz]=last[nivel-it.x+1];
    for(auto x:edge[nod])
        dfs(x,nod);
}
int main()
{
    f>>n>>m;int x,y;
    for(int i=1;i<=n;i++)
    {
        f>>x;
        edge[x].push_back(i);
    }
    for(int i=1;i<=m;i++)
    {
        f>>x>>y;
        a[x].push_back({y,i});
    }
    for(int i=1;i<=n;i++)
        if(niv[i]==0)
            dfs(i,0);
    for(int i=1;i<=m;i++)
        g<<ans[i]<<'\n';
    return 0;
}