Cod sursa(job #1554261)

Utilizator elevenstrArina Raileanu elevenstr Data 21 decembrie 2015 11:01:29
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
#define MAX 250011
int n,m;
vector<int> v[MAX];
vector<int> str[MAX];
bitset <MAX> viz;
int mat[21][MAX];
/*
void dfs(int nod)
{  viz[nod]=1;
   for(vector<int> ::iterator ir=v[nod].begin();ir!=v[nod].end();ir++)
    if(viz[*ir]==0)
   {   std::vector <int> ::iterator it;
       if(!str[nod].empty())
       {it=str[nod].begin();
       str[*ir].assign(it,str[nod].end());
       }
       str[*ir].push_back(nod);
       dfs(*ir);
   }
}
*/
int main()
{   int x,b,i,j;
    in>>n>>m;
   for(int i=1;i<=n;i++)
   {
       in>>mat[0][i];
   }
   for(int i=1;i<=20;i++)
      for(int j=1;j<=n;j++)
       mat[i][j]=mat[i-1][mat[i-1][j]];
   //stramosul stramosului
    while(m--)
   {   int c;
       in>>c>>b;
       int i=0;
       while(b!=0)
       {
           if(b%2)
           c=mat[i][c];
           b=b/2;
           i++;
       }
       /*int j=str[a].size()-b;
       if(j>=0)out<<str[a][j]<<'\n';
       else out<<0<<'\n';
       //care e al b-ulea stramos al lui c
       */
       out<<c<<'\n';
   }

    return 0;
}