Cod sursa(job #1554249)

Utilizator starlingIon Popa starling Data 21 decembrie 2015 10:37:36
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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;
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,a,b;
    in>>n>>m;
   for(int i=1;i<=n;i++)
   {
       in>>x;
        v[x].push_back(i);
   }
   for(int i=1;i<=n;i++)
    if(viz[i]==0)
      dfs(i);
    while(m--)
   {
       in>>a>>b;
       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 a
   }

    return 0;
}