Pagini recente » Cod sursa (job #758992) | Cod sursa (job #276415) | Cod sursa (job #2521129) | Cod sursa (job #526856) | Cod sursa (job #2285551)
#include <iostream>
#include <fstream>
#include <vector>
std::vector<long> sol_tmp;
void DFS(int rad, std::vector<long> Graf[], int K[], int solutie[]){
sol_tmp.push_back(rad);
if(K[rad] != 0){
solutie[rad] = 1 + solutie[sol_tmp[sol_tmp.size() - 1 - K[rad]]];
}
for(int i = 0; i < Graf[rad].size(); ++i){
DFS(Graf[rad][i], Graf, K, solutie);
}
sol_tmp.pop_back();
}
int main()
{
std::ifstream in("cerere.in");
std::ofstream out("cerere.out");
long N;
in >> N;
int K[N + 1];
for(int i = 1; i <= N; ++i){
in >> K[i];
}
int tata, fiu;
bool are_tata[N + 1] = {};
std::vector<long> Graf[N + 1];
while(in >> tata >> fiu){
Graf[tata].push_back(fiu);
are_tata[fiu] = true;
}
int solutie[N + 1] = {};
for(int i = 1; i <= N; ++i){
if(are_tata[i] == false){
DFS(i, Graf, K, solutie);
break;
}
}
for(int i = 1; i <= N; ++i){
out << solutie[i] << ' ';
}
return 0;
}