Cod sursa(job #1268693)

Utilizator Corina1997Todoran Ana-Corina Corina1997 Data 21 noiembrie 2014 12:08:33
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream is("cerere.in");
ofstream os("cerere.out");

vector<int> k, d, ta, vfr;
vector<vector<int> > G;
vector<bool> s;

int n, aux, x, y, vf;

void DF( int m );

int main()
{
    is >> n;
    G.resize(n+1);
    k.resize(n+1);
    d.resize(n+1);
    s.resize(n+1);
    ta.resize(n+1);
    vfr.resize(n+1);
    for ( int i = 1; i <= n; i++ )
        is >> k[i];

    for ( int i = 1; i <= n; i++ )
    {
        is >> x >> y;
        G[x].push_back(y);
        vfr[y] = true;
    }

    for ( int i = 1; i <= n; i++ )
        if ( vfr[i] == false )
        {
            vf = i;
            break;
        }

    DF(vf);

    for ( int i = 1; i <= n; i++ )
        os << d[i] << ' ';

    is.close();
    os.close();
    return 0;
}

void DF( int m )
{
    s[x] = true;
    for ( vector<int>::iterator it = G[m].begin(); it != G[m].end(); ++it )
    {
        if ( k[(*it)] == 0 )
            ta[++aux] = 0;
        else
            ta[++aux] = ta[aux-k[(*it)]] + 1;
        d[(*it)] = ta[aux];
        DF((*it));
    }
    ta[aux--] = 0;
}