Cod sursa(job #3313056)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 1 octombrie 2025 23:25:39
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, i, x, y, rasp[100002], tata[100002];
bool rad[100002], fr[100002];
vector<int> gr[100002];
int stiv[100002], top;

static inline void DFS(int nod) {
    fr[nod] = true;
	stiv[++top] = nod;

	rasp[nod] = 1 + rasp[stiv[top - tata[nod]]];

	for(int urm : gr[nod]) {
		if(!fr[urm]) DFS(urm);
	}
	top--;
}

int main() {
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> n;
	for(i = 1; i <= n; i++) {
		fin >> tata[i];
        rasp[i] = -1;
    }

	for(i = 1; i < n; i++) {
		fin >> x >> y;
		rad[y] = true;
		gr[x].push_back(y);
		gr[y].push_back(x);

	}
	for(i = 1; i <= n; i++) {
		if(!rad[i]) {
			DFS(i);
			break;
		}
    }

	for(i = 1; i <= n; i++) fout << rasp[i] << " ";

    return 0;
}