Cod sursa(job #1729940)

Utilizator Bodo171Bogdan Pop Bodo171 Data 15 iulie 2016 21:17:20
Problema Stramosi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=250005;
int topsort[nmax],a[18][nmax],n,m,i,k,x,lg[nmax],j,nod,q,p,lbit;
vector<int> v[nmax];
void dfs(int x)
{
    topsort[k]=x;k++;
    for(int i=0;i<v[x].size();i++)
    {
        dfs(v[x][i]);
    }
}
int main()
{
    ifstream f("stramosi.in");
    ofstream g("stramosi.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
        {
        f>>x;
        v[x].push_back(i);
        a[0][i]=x;
        }
    dfs(0);
    for(i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;
  for(j=1;(1<<j)<=n;j++)
    for(i=1;i<=n;i++)
    {
        nod=topsort[i];
        a[j][nod]=a[j-1][a[j-1][nod]];
    }
   for(i=1;i<=m;i++)
   {
       f>>p>>q;
       while(q!=0&&p!=0)
       {
           lbit=((q^(q-1))&q);
           if(lbit>lg[n]) {p=0;}
           else p=a[lg[lbit]][p];
           q-=lbit;
       }
       g<<p<<'\n';
   }
    return 0;
}