Cod sursa(job #586857)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 3 mai 2011 08:46:01
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <vector>
using namespace std;
vector<int>f[100001];
int S[100001],m,n,k[100001],a,b,deg[100001],r,cereri[100001];
bool sol[100001];
void DFS(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<f[x].size();i++)
    DFS(f[x][i]);
  m--;
}
int main()
{
    int i;
    ifstream fi("cerere.in");
    ofstream fo("cerere.out");
    fi>>n;
    for(i=1;i<=n;i++) { fi>>k[i]; if(k[i]==0) sol[i]=true; }
    for(i=1;i<n;i++)
    {
      fi>>a>>b;
      f[a].push_back(b);
      deg[b]++;
    }
    for(i=1,r=0;i<=n and !r;i++)
      if(!deg[i]) r=i;
    DFS(r);
    for(i=1;i<=n;i++) fo<<cereri[i]<<" ";
    fo<<"\n";
    return 0;
}