Cod sursa(job #196557)

Utilizator Matei14Popa-Matei Mihai Matei14 Data 27 iunie 2008 09:15:37
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<string.h>
#define N 100005
struct list{
	int val;
	list *fin;
}*p[N+5];
int n, cer[N+5],st[N+5],sol[N+5],fiu[N+5];
void funct(int x,int k){
	st[k]=x;
	if(cer[x]!=0)
		sol[x]=1+sol[st[k-cer[x]]];
	for(list *p1=p[x];p1!=NULL;p1=p1->fin)
		funct(p1->val,k+1);
}
int main(){
	int var1,var2,i;
	list *p1;
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&cer[i]);
	for(i=1;i<=n;++i){
		scanf("%d %d",&var1,&var2);
		fiu[var2]=var1;
		p1 = new list;
		p1->val = var2;
		p1->fin = p[var1];
		p[var1] = p1;
	}
	for(i=1;i<=n;++i)
		if( fiu[i]==0 ){
			funct(i,1);
			break;
		}
	for(i=1;i<=n;++i)
		printf("%d ",sol[i]);
	printf("\n");
	fclose(stdin);
	fclose(stdout);
	return 0;
}