Cod sursa(job #500797)

Utilizator nautilusCohal Alexandru nautilus Data 13 noiembrie 2010 09:59:08
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#define dmax 100010
using namespace std;

int n;
int a[dmax],tata[dmax],stramos[dmax],sol[dmax];

void calc_stramos()
{
 int i,j;
	
 for (i=1; i<=n; i++)
	 if (a[i]!=0)
		 for (j=1; j<=a[i]; j++)
			 stramos[i]=tata[stramos[i]];
}

int numar(int k)
{
 if (a[k]==0)
	 return 0; else
	 if (sol[stramos[k]]!=-1)
		 return (1+sol[stramos[k]]); else
		 return (1+numar(stramos[k]));
}

int main()
{
 int i,x,y;
	
 ifstream fin("cerere.in");
 fin>>n;
 for (i=1; i<=n; i++)
	 {
	  fin>>a[i];
	  stramos[i]=i; sol[i]=-1;
	 }
 for (i=1; i<=n; i++)
	 {
	  fin>>x>>y;
	  tata[y]=x;
	 }
 
 calc_stramos();
 
 for (i=1; i<=n; i++)
	 if (sol[i]==-1)
		 sol[i]=numar(i);

 ofstream fout("cerere.out");
 for (i=1; i<=n; i++)
	 fout<<sol[i]<<" ";
	
 fin.close();
 fout.close();
 return 0;
}