Cod sursa(job #782519)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 28 august 2012 10:19:36
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include<algorithm>
#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;//j,k,l,max=0, min=99999, k, urm
    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;
}