Cod sursa(job #3209850)

Utilizator superffffalexandru radu superffff Data 3 martie 2024 17:07:18
Problema Stramosi Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <cctype>
#include <unordered_map>
#include <cmath>
#include <bitset>
#include <set>
#include <string>
#include <cstring>
#include <algorithm>
#include <deque>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
typedef pair <int,int>iPair;
int a[100005],b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,S,t,x,y,z,ok,nr,C,xc,yc,Min,w,weight,u,v,ans,cost,Max,MOD,val,lvl,sum,MAX,current,st,dr,BASE,mid,semn;
vector<int> fii[250005];
int str[250005][35];
int viz[250005];
void dfs(int node,int pt){
     viz[node]=1;
     str[node][0]=pt;
        for(int j=1;(1<<j)<=n && str[str[node][j-1]][j-1]!=0;j++){
            str[node][j]=str[str[node][j-1]][j-1];
        }
     for(auto w:fii[node]){
        if(viz[w]==0) {
            dfs(w,node);
        }
     }


}
int main()
{
 in>>n>>m;
 for(i=1;i<=n;i++){
    in>>x;
    fii[x].push_back(i);
 }
 dfs(0,0);
 for(e=1;e<=m;e++){
     in>>x>>y;
    k=x;
    for(j=0;(1<<j)<=y;j++){
        if(y & (1<<j)){
            k=str[k][j];
        }
    }
    out<<k<<'\n';
 }
  return 0;

}