Cod sursa(job #535078)

Utilizator david_raucaRauca Ioan David david_rauca Data 16 februarie 2011 18:54:16
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream>
#include<vector>
using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

int n; int sum, k;
//int nr;

int t[100005];
int sol[100005];

vector<int> M;

void Read();
void Solve();
void Find( int x, int nod);

int main()
{
    Read();
    Solve();
    
    fin.close();
    fout.close();
    
    return 0;
}

void Read()
{
     fin >> n;
     M.resize(n+1);
     for( int i = 1; i <= n; ++i )
          fin >> M[i];
     
     int x, y;
     while( fin >> x >> y )
            t[y] = x;
}

void Solve()
{
     for( int i = 1; i <= n; ++i )
     {
          k = i;
          int nr = 0;
          sum = 0;
          while( M[k] != 0 )
          {
                 Find( M[k], k);
                 sum++;
                 if( sol[i] == sum )
                 {
                     sum = sum + sol[i];
                     break;
                 }
          }
          sol[i] = sum;
          fout << sum << ' ';
     }
}

void Find( int x, int nod )
{
    if( x == 0 )
    {
        k = nod;
        return;
    }
    Find( x-1, t[nod] );
}