Cod sursa(job #773528)

Utilizator valentina506Moraru Valentina valentina506 Data 1 august 2012 22:27:47
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <vector>
using namespace std;
vector<int>a[100001];
int s[100001],m,n,k[100001],x,y,d[100001],r,cereri[100001];
bool sol[100001];
void df(int x)
{
  s[++m]=x;
  int i;
  if(sol[x]) 
	  cereri[x]=0; 
  else
  cereri[x]=cereri[s[m-k[x]]]+1;
  for(i=0;i<a[x].size();i++)
    df(a[x][i]);
  m--;
}
int main()
{
    int i;
    ifstream f("cerere.in");
    ofstream g("cerere.out");
    f>>n;
    for(i=1;i<=n;i++) 
	{ 
		f>>k[i]; 
		if(k[i]==0) 
			sol[i]=1; 
	}
    for(i=1;i<n;i++)
    {
      f>>x>>y;
      a[x].push_back(y);
      d[y]++;
    }
    for(i=1,r=0;i<=n && !r;i++)
      if(!d[i]) 
		  r=i;
    df(r);
    for(i=1;i<=n;i++) 
		g<<cereri[i]<<" ";
   
    return 0;
}