Cod sursa(job #774051)

Utilizator lily3Moldovan Liliana lily3 Data 3 august 2012 11:41:22
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;

int i,j,n,m=0,x,y,g[100001],s[100001],ord[100001],nr,niv[100001],rad,tata[100001];
vector<int> a[100001];
int viz[100001];
void df(int x)
{
	int i;
	ord[++m]=x;
	if(!s[x])
		g[x]=0;
	else
		g[x]=g[ord[m-s[x]]]+1;
	for(i=0;i<a[x].size();++i)
		df(a[x][i]);
	--m;
}
int main()
{
	ifstream f("cerere.in");
	freopen("cerere.out","w",stdout);
	f>>n;
	for(i=1;i<=n;++i)
		f>>s[i];
	for(i=1;i<n;++i)
	{
		f>>x>>y;
		a[x].push_back(y);
		++tata[y];
	}
	for(i=1;i<=n;++i)
		if(!tata[i])
			rad=i,i=n+1;
	df(rad);
	for(i=1;i<=n;++i)
		printf("%d ",g[i]);
	return 0;
}