Cod sursa(job #2285553)

Utilizator skoda888Alexandru Robert skoda888 Data 18 noiembrie 2018 18:51:33
Problema Cerere Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <vector>

const int NMAX = 1e5 + 5;

using namespace std;

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

int n;
int c[NMAX], val[NMAX];
bool use[NMAX];
vector < int > v;
vector < int > g[NMAX];

void dfs(int nod){
	v.push_back(nod);
	if(c[nod])
		val[nod] = 1 + val[v[v.size() - 1 - c[nod]]];
	for(int i : g[nod])
		dfs(i);
	v.pop_back();
}

int main(){
	fin >> n;
	for(int i = 1; i <= n; i++)
		fin >> c[i];
	int x, y;
	while(fin >> x >> y)
		g[x].push_back(y), use[y] = 1;
	fin.close();
	for(int i = 1; i <= n; i++)
		if(!use[i])
			dfs(i);
	for(int i = 1; i <= n; i++)
		fout << val[i] << ' ';
	fout.close();
	return 0;
}