Cod sursa(job #1950034)

Utilizator Lungu007Lungu Ionut Lungu007 Data 2 aprilie 2017 17:14:14
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <vector>
#include <fstream>
#define NMAX 100005

using namespace std;

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

int n,m,c[NMAX],t[NMAX],viz[NMAX],x,y,cost,d[NMAX],stiva[NMAX],index;
vector<int> a[NMAX];


void dfs(int nod) {
    viz[nod] = 1;

    if(c[nod] == 0) d[nod] = 0;
    else d[nod] = 1+ d[ stiva[ index-c[nod] ] ];
    stiva[index++] = nod;


    for(int i=0;i<a[nod].size();i++) {
        if(!viz[a[nod][i]]){
            dfs(a[nod][i]);
            index--;
        }
    }
}

int main()
{
    in >> n;
    for(int i=1;i<=n;i++) {
        in >> c[i];
    }

    for(int i=1;i<n;i++) {
        in >> x >> y;
        t[y] = x;
        a[x].push_back(y);
    }
    int rad = 1;

    for(int i=1;i<=n;i++) {
        if(t[i] == 0) {
            rad = i;
            break;
        }
    }
    dfs(rad);

    for(int i=1;i<=n;i++) {
        //cout << t[i] << " ";
        out << d[i] << " ";
    }//
    //cout << calcStr(4);
    return 0;
}