Cod sursa(job #1054224)

Utilizator iarbaCrestez Paul iarba Data 13 decembrie 2013 15:15:58
Problema Cerere Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <cstdio>
using namespace std;
int p[18][100001],c[100001],r[100001],i,j,n,x,y;
void rezolva(int poz)
{
	int k,l; 
	if(r[poz]==0){
		k=poz;j=0;l=c[poz];
		while(l){if(l%2){k=p[j][k];}j++;l/=2;}
		rezolva(k);r[poz]=r[k]+1;
				 }
}
int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%ld",&n);
	for(i=1;i<=n;i++){scanf("%ld",&c[i]);if(c[i]==0){r[i]=1;}}
	for(i=1;i<=n;i++){scanf("%ld%ld",&x,&y);p[0][y]=x;}
	for(j=1;j<=17;j++){
		for(i=1;i<=n;i++){
			p[j][i]=p[j-1][p[j-1][i]];
						 }
					  }
	for(i=1;i<=n;i++){rezolva(i);printf("%ld ",r[i]-1);}
return 0;
}