Cod sursa(job #1053500)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 12 decembrie 2013 19:58:29
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.8 kb
#include<fstream>
#include<vector>
using namespace std;
int n,K[100100],R;
int grad[100100];
vector <int> G[100100];
int st[100100],vf,sol[100100];

inline void Citire()
{
	int i,x,y;
	ifstream fin("cerere.in");
	fin>>n;
	for(i=1;i<=n;i++)
		fin>>K[i];
	for(i=1;i<n;i++)
	{
		fin>>x>>y;
		G[x].push_back(y);
		grad[y]++;
	}
	for(i=1;i<=n;i++)
		if(grad[i]==0)
			R=i;
	fin.close();
}

inline void DFS(int x)
{
	st[++vf]=x;
	if(K[x]==0)
		sol[x]=0;
	else
		sol[x]=sol[st[vf-K[x]]]+1;
	vector <int>::iterator it;
	for(it=G[x].begin();it!=G[x].end();it++)
		DFS(*it);
	vf--;
}

inline void Afisare()
{
	int i;
	ofstream fout("cerere.out");
	for(i=1;i<=n;i++)
		fout<<sol[i]<<' ';
	fout<<"\n";
	fout.close();
}

int main()
{
	Citire();
	DFS(R);
	Afisare();
	return 0;
}