Cod sursa(job #1735739)

Utilizator liviu23Liviu Andrei liviu23 Data 30 iulie 2016 19:59:19
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>
#define DIM 100005
using namespace std;

int n,k[DIM],st[DIM],ans[DIM];
vector<int> adj[DIM];

void dfs(int p) {
    st[++st[0]]=p;
    if(!k[p])
        ans[p]=0;
    else
        ans[p]=ans[st[st[0]-k[p]]]+1;;
    for(int i=0;i<adj[p].size();i++)
        dfs(adj[p][i]);
    st[0]--;
}

int main()
{
    ifstream fin("cerere.in");
    ofstream fout("cerere.out");
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>k[i];
    int a,b;
    for(int i=1;i<n;i++) {
        fin>>a>>b;
        adj[a].push_back(b);
        ans[b]++;
    }
    for(int i=1;i<=n;i++)
        if(!ans[i]) {
            dfs(i);
            break;
        }
    for(int i=1;i<=n;i++)
        fout<<ans[i]<<" ";
    return 0;
}