Cod sursa(job #1217495)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 7 august 2014 15:53:46
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");

const int max_n = 100005;

vector <int> a[max_n];
int stramos[max_n],sol[max_n],st[max_n];
int i,n,x,y,radacina;
bool tata[max_n];

void dfs(int nod, int k){
     st[k]=nod;
     if(stramos[nod]) sol[nod]=1+sol[st[k-stramos[nod]]];
     
     unsigned int dim=a[nod].size();
     for(unsigned int j=0;j<dim;j++) dfs(a[nod][j],k+1);
}

int main(){
    fi>>n;
    for(i=1;i<=n;i++){ fi>>stramos[i]; tata[i]=0; sol[i]=0; }
    
    for(i=1;i<=n-1;i++){
                        fi>>x>>y;
                        a[x].push_back(y);
                        tata[y]=1;
                       }
    
    for(i=1;i<=n;i++)
      if(!tata[i]) radacina=i;
    
    dfs(radacina,0);
    
    for(i=1;i<=n;i++) fo<<sol[i]<<" ";
    
    fi.close();
    fo.close();
    return 0;
}