Cod sursa(job #166758)

Utilizator razvi9Jurca Razvan razvi9 Data 28 martie 2008 14:33:22
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
#include<vector>
std::vector<int> a[100001];
int n,i,s[100001],r[100001],st[100001],x,y;
void get(int vf,int niv)
{
	if(s[vf]==0) r[vf]=0;
	else r[vf]=r[st[niv-s[vf]]]+1;
	st[niv]=vf;
	for(int i=0;i<a[vf].size();i++)
		get(a[vf][i],niv+1);

}
char buf[100],*p;
void getpair()
{
	gets(buf);
	p=buf;
	while(*p==' ')p++;
	x=0;
	while(*p>='0' && *p<='9'){x=x*10+*p-'0';p++;}
	while(*p==' ')p++;
	y=0;
	while(*p>='0' && *p<='9'){y=y*10+*p-'0';p++;}
}
int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&s[i]);
	scanf(" ");
	for(i=1;i<n;i++){
		getpair();
		a[x].push_back(y);
		r[y]=1;}
	i=1;
	while(r[i])i++;
	get(i,1);
	for(i=1;i<=n;i++)
		printf("%d ",r[i]);
	fclose(stdout);
	return 0;
}