Cod sursa(job #535152)

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

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

int n; int sum, k;

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

int M[100005];

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

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

void Read()
{
     fin >> n;
     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;
          sum = 0;
          int ok = 1;
          while( M[k] != 0 && ok == 1 )
          {
                 Find( M[k], k);
                 sum++;
                 if( s[k] )
                 {
                     sum = sum + sol[k];
                     ok = 0;
                 }
          }
          sol[i] = sum;
          s[i] = true;
          fout << sum << ' ';
     }
}

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