Cod sursa(job #1384428)

Utilizator katakonst94Pirvu Constantin Catalin katakonst94 Data 11 martie 2015 08:56:40
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
#include<vector>
#include<stack>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector<unsigned short>mat[150000];
vector<unsigned short>cost[150000];
char vis[150000]={};
int ndfin;
int c=0;
int rad;
void dfs(int nod)
{
    ndfin=nod;
    vis[nod]=1;

   if(mat[nod].size()>0&&c<=1000)
    {

        if(vis[mat[nod][0]]==0)
        {
            c++;

           cost[rad].push_back(mat[nod][0]);
           dfs(mat[nod][0]);
        }
     }
}

void dfit(int nod)
{
  std::stack<int> st;

  st.push(nod);
  int nd;
  while(st.empty()!=false)
  {
nd=st.top();
st.pop();
vis[nd]=1;
 if(mat[nd].size()>0)
    {

        if(vis[mat[nd][0]]==0)
        {
           cost[rad].push_back(mat[nod][0]);
           st.push(mat[nd][0]);
        }
     }

  }


}
int main()
{
    int n,p;
    f>>n>>p;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
         mat[i].push_back(x);
    }


    for(int i=1;i<=n;i++){

    if(vis[i]==0)
    {rad=i;
     dfs(i);
            if(mat[i].size()>0)
            {

              ndfin=mat[i][0];
          }

         if(ndfin!=i){
    cost[i].push_back(ndfin);
   for(int k=0;k<cost[ndfin].size();k++)

{
    cost[i].push_back(cost[ndfin][k]);
}
}
    }



    }


 for(int i=1;i<=p;i++)
    {
        int x,k;
      f>>x>>k;
      if(k>=cost[x].size())
        g<<0<<"\n";
      else
      g<<cost[x][k-1]<<"  \n";
    }
    cout << "Hello world!" << endl;
    return 0;
}