Cod sursa(job #1439382)

Utilizator petremariaPetre Maria petremaria Data 22 mai 2015 11:09:45
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector<int> vec[250004],fii[250004], s,rad;
int m,n,p,q;
void dfs(int nod)
{
            int l=s.size(),p=1;
            s.push_back(nod);
            while((l-p)>=0)
            {
                vec[nod].push_back(s[l-p]);
                p*=2;
            }
            l=fii[nod].size();
            for(int i=0;i<l;i++)
                dfs(fii[nod][i]);
            s.pop_back();
}
int stramosi(int p, int q)
{
    int e=0;
    while(p&&e<vec[q].size())
    {
        if(p%2)
        {
            q=vec[q][e];
        }
            e++;
            p=p/2;
    }
    if(p!=0)
        return 0;
    return q;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        if(!x)
            rad.push_back(i);
        else
            fii[x].push_back(i);
    }
    int l=rad.size();
    for(int i=0;i<l;i++)
            dfs(rad[i]);
    for(int i=0;i<m;i++)
    {
        f>>q>>p;
        g<<stramosi(p,q)<<"\n";
    }
    f.close();g.close();
    return 0;
}