Cod sursa(job #1268715)

Utilizator alexb97Alexandru Buhai alexb97 Data 21 noiembrie 2014 12:25:27
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

int n;
vector<vector<int>> g;
vector<int> t;
vector<int> s;
vector<int> c;
vector<int> f;
int cnt;

void Read();
void Write();
void Dfs(int x);

int main()
{
	Read();
	Dfs(1);
	Write();
	is.close();
	os.close();
	return 0;
}

void Read()
{
	is >> n;
	g = vector <vector <int>>(n+1);
	t = vector <int>(n+1);
	c = vector <int>(n+1);
	s = vector <int>(n+1);
	f = vector <int>(n+1);
	int x, y;
	for(int i = 1; i <= n; ++i)
	{
		is >> x;
		c[i] = x;
	}
	//for(int i = 1; i <= n; ++i)
		//os << c[i] << ' ';
	for(int i = 1; i < n; ++i)
	{
		is >> x >> y;
		g[x].push_back(y);
		t[y] = x;
		
	} 
}

void Write()
{
	for(int i = 1; i <= n; ++i)
	{
		os<< f[i] <<' ';
	}
	return;
}

/*
 * for(vector<int>::iterator y = g[i].begin(); y != g[i].end(); ++y)
			os << i << ' ' << *y << ' ';
		os<<'\n';
 */

void Dfs(int x)
{
	cnt++;
	s[cnt] = x;
	if(c[x] == 0)
		f[x] = 0;
	if(c[x] != 0)
	{
		f[x] = f[s[cnt - c[x]]] + 1;  
	}
	for(vector<int>::iterator y = g[x].begin(); y != g[x].end(); ++y)
	{
			Dfs(*y);
	}
	cnt--;
}