Cod sursa(job #213605)

Utilizator madmanjonesJones the one madmanjones Data 10 octombrie 2008 16:19:36
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <vector>
using namespace std;
const int NMAX=100001;
int N,K[NMAX],Rad,s[NMAX],nr[NMAX];
bool u[NMAX];
vector<int> a[NMAX];
ifstream f("cerere.in");
ofstream g("cerere.out");
void df(int vf,int k){
     u[vf]=true;
     s[k]=vf;
     if (K[vf]>0) nr[vf]=nr[s[k-K[vf]]]+1;
     for (vector<int>::iterator it=a[vf].begin();it!=a[vf].end();++it)
       if (!u[*it]) df(*it,k+1);
     }
int main(){
    int i,x,y;
    f>>N;
    for (i=1;i<=N;++i) f>>K[i];
    for (i=1;i<N;++i){
        f>>x>>y;
        u[y]=true;
        a[x].push_back(y);}
    for (i=1;i<=N && !Rad;++i)
      if (!u[i]) Rad=i;
    memset(u,false,sizeof(u));
    df(Rad,1);
    for (i=1;i<=N;++i) g<<nr[i]<<' ';
    return 0;
}