Cod sursa(job #3239937)

Utilizator paull122Paul Ion paull122 Data 9 august 2024 13:44:42
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

#define VMAX 100
#define NMAX 100000
#define LOG 21
#define INF (int)(10e8)
#define MOD 1000000007
#define ll   long long int


#define NIL 0

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

int k[NMAX+1];
int dp[NMAX+1],d[NMAX+1];
int n;

vector<int> adj[NMAX+1];

int t[NMAX+1];
void dfs(int x,int h)
{
    d[h]=x;
    if(!k[x])
    {
        dp[x]=0;
    }
    else
    {
        dp[x] = dp[d[h-k[x]]] + 1;
    }
    for(int i : adj[x])
    {
        dfs(i,h+1);
    }
}
int main()
{
    fin >> n;
    for(int i=1;i<=n;i++)
    {
        fin >> k[i];
    }
    for(int i=1;i<=n-1;i++)
    {
        int x,y;
        fin >> x >> y;
        adj[x].push_back(y);
        t[y]=x;
    }

    int r=0;
    for(int i=1;i<=n && !r;i++)
    {
        if(!t[i])
        {
            r=i;
        }
    }

    dfs(r,0);
    for(int i=1;i<=n;i++)
    {
        fout << dp[i] << " ";
    }
}