Cod sursa(job #1889572)

Utilizator stefii_predaStefania Preda stefii_preda Data 22 februarie 2017 19:46:52
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");

const int NMAX = 100005;
vector <int> fii[NMAX];
int k[NMAX], g[NMAX], stiva[NMAX];
bool aretata[NMAX];
int cnt = 0;

vector <int> ::iterator it;

void dfs(int x)
{
    cnt++;
    stiva[cnt] = x;
    if(k[x] == 0)
        g[x] = 0;
    else
        g[x] = g[stiva[cnt - k[x]]] + 1;
    vector <int> ::iterator it;
    for(it = fii[x]. begin(); it < fii[x].end(); ++it)
        dfs(*it);
    cnt--;
}


int main()
{
    int n, i;
    in >> n;
    for(i = 1; i <= n; i++)
        in >> k[i];
    int a, b;
    for(i = 1; i <= n; i++)
    {
        in >> a >>b;
        fii[a].push_back(b);
        aretata[b] = 1;
    }
    int rad = 0;
    for(i = 1; i <= n && rad == 0; i++)
        if(aretata[i] == 0)
            rad = i;
    dfs(rad);
    for(i= 1; i <= n; i++)
        out <<g[i]<<" ";


    return 0;
}