Cod sursa(job #2007213)

Utilizator refugiatBoni Daniel Stefan refugiat Data 2 august 2017 11:48:14
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream si("cerere.in");
ofstream so("cerere.out");
int k[100005];
int t[100005];
int cont[100005];
vector<int> f[100005],q;
inline void dfs(int m)
{
    if(k[m])
        cont[m]=cont[q[q.size()-k[m]]]+1;
    q.push_back(m);
    for(int i=0;i<f[m].size();++i)
        dfs(f[m][i]);
    q.pop_back();
}
int main()
{
    int n;
    si>>n;
    for(int i=1;i<=n;++i)
    {
        si>>k[i];
        cont[i]=-1;
        if(k[i]==0)
            cont[i]=0;
    }
    int a,b;
    for(int i=1;i<n;++i)
    {
        si>>a>>b;
        f[a].push_back(b);
        t[b]=a;
    }
    for(int i=1;i<=n;++i)
        if(!t[i])
            dfs(i);
    for(int i=1;i<=n;++i)
    {
        so<<cont[i]<<' ';
    }
    return 0;
}