Cod sursa(job #2980744)

Utilizator 222cezarCezar Stilpeanu 222cezar Data 16 februarie 2023 19:39:35
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("cerere.in");
ofstream out("cerere.out");

const int N = 1e5;
vector<vector<int>> fii(N + 1);
vector<int> tati(N + 1, 0), stramos(N + 1), drum(N + 1), nr_c(N + 1);
int n;

void dfs(int x, int nivel) {
 	drum[nivel] = x;
 	if(stramos[x] != 0) {
 	 	nr_c[x] = 1 + nr_c[drum[nivel - stramos[x]]];
 	}
 	for(auto y : fii[x]) {
 	 	dfs(y, nivel + 1);
 	}
}

int radacina() {
 	for(int i = 1; i <= n; i++) {
 	 	if(tati[i] == 0) return i;
 	}
 	return 0;
}

int main() {
	in >> n;
 	for(int i = 1; i <= n; i++) {
 	 	in >> stramos[i];
 	}
 	for(int i = 1; i <= n; i++) {
 		int x, y;
 		in >> x >> y;
 		tati[y] = x;
 		fii[x].push_back(y);
 	}
 	in.close();
 	int r = radacina();
 	dfs(r, 0);
 	for(int i = 1; i <= n; i++) out << nr_c[i] << ' ';
 	out.close();
 	return 0;
}