Cod sursa(job #2310915)

Utilizator LorenaMariaHantig Lorena LorenaMaria Data 2 ianuarie 2019 13:18:55
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n,k[100001],x,y,r,s[100001],t[100001];
bool f[100001];
vector <int> a[100001];
void dfs(int v,int n)
{ f[v]=1;
  s[n]=v;
  if(k[v]>0)
     t[v]=t[s[n-k[v]]]+1;
  vector <int>::iterator it;
  for(it=a[v].begin();it!=a[v].end();it++)
    if(!f[*it])
       dfs(*it,n+1);
}
int main()
{ in>>n;
  for(int i=1;i<=n;i++)
    in>>k[i];
  for(int i=1;i<n;i++)
    in>>x>>y,f[y]=1,a[x].push_back(y);
  for(int i=1;i<=n && !r;i++)
    if(!f[i])
       r=i;
  for(int i=1;i<=n;i++)
    f[i]=0;
  dfs(r,1);
  for(int i=1;i<=n;i++)
    out<<t[i]<<' ';
  in.close();
  out.close();
  return 0;
}