Cod sursa(job #1082989)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 15 ianuarie 2014 14:45:54
Problema Cerere Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.77 kb
#include <vector>
#include <fstream>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
int d[100001],s[100001],u[100001],b[100001],g[100001],n,cnt;
vector<int>v[100001];

void df(int nod) {
    u[nod]=1;
    b[++cnt]=nod;
    if (!d[nod])
        s[nod]=0;
    else
        s[nod]=s[b[cnt-d[nod]]]+1;
    for (int i=0;i<v[nod].size();++i)
        if (!u[v[nod][i]])
            df(v[nod][i]);
    --cnt;
}
int main() {
    int x, y;
    fi>>n;
    for (int i=1;i<=n;++i)
        fi>>d[i];
    for (int i=1;i<n;++i) {
        fi>>x>>y;
        v[x].push_back(y);
        ++g[y];
    }
    for (int i=1;i<=n;++i)
        if(!g[i])
            df(1);
    for (int i=1;i<n;++i)
        fo<<s[i]<<' ';
    fo<<s[n];
    return 0;
}