Cod sursa(job #893397)

Utilizator fulgerulnegruFMI Ekart Dragos-Ioan fulgerulnegru Data 26 februarie 2013 15:26:53
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
vector<vector<int> > *a;

int stramos(int l,int k){
  if(k == 0)
    return l ;
  stramos((*a)[1][l],k-1);
}

int cal(int j){
  if((*a)[2][j] == -1)
    return 1;
  if((*a)[3][j] == 0)
    (*a)[3][j] = cal ((*a)[2][j]);
  return (*a)[3][j]+1;
}

int main (){
  int n,i,j,t;
  in>>n;
  vector<vector<int> > v(4,vector<int>(n+1));
  a = &v;
  for(i=1;i<=n;i++)
  {
    in>>v[0][i];
  }
  for(i=0;i<n;i++)
  {
    in>>j>>t;
    v[1][t] = j;
  }

  for(i=1;i<=n ;i++)
  {
    if(v[0][i] == 0){
      v[2][i] = -1;
    }
    else
      if(v[2][i] == 0)
        v[2][i] = stramos(i,v[0][i]);
  }

  for(i=1;i<=n;i++)
    if(v[2][i] != -1)
      cal(i);

  //for(i=1;i<=n;i++)
    //cout<<v[1][i]<<" ";
  //cout<<"\n";

  for(i=1;i<=n;i++)
    out<<v[3][i]<<" ";
}