Cod sursa(job #2456017)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 13 septembrie 2019 12:55:22
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> graph[100001];
int st[100001], v[100001], i, n, a, b, k, tata[100001], d[100001];
void dfs(int node, int level){
    st[level] = node;
    d[node] = d[st[level - v[node]]] + 1;
    for(int i = 0; i < graph[node].size(); i++)
        dfs(graph[node][i], level + 1);
}
int main()
{   f >> n;
    for(i = 1; i <= n; i++)
        f >> v[i];
    for(i = 1; i <= n - 1; i++){
        f >> a >> b;
        graph[a].push_back(b);
        tata[b] = a;
    }
    for(i = 1; i <= n; i++)
        if(tata[i] == 0){
            k = i;
            break;
        }
    d[k] = 0;
    dfs(k, 1);
    for(i = 1; i <= n; i++)
        g << d[i] - 1 << ' ';
    return 0;
}