Cod sursa(job #1077888)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 11 ianuarie 2014 19:12:01
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#include<vector>
using namespace std;
int rad,k[100005],x,y,n,str[100005],st[100005],g[100005],t[100005];
ifstream in("cerere.in"); ofstream out("cerere.out");
vector <int> l[100005];
void dfs(int nod){
    st[++st[0]]=nod;
    str[nod]=st[st[0]-k[nod]];
    if(k[nod]!=0) t[nod]=t[st[st[0]-k[nod]]]+1;
    else t[nod]=0;
    for(vector <int> :: iterator it=l[nod].begin(); it!=l[nod].end();++it)
        dfs(*it); //in str[i] am stramosul in care mergem direct din i
    --st[0];
}
int main(){
    in>>n;
    for(int i=1;i<=n;++i) in>>k[i];
    for(int i=1;i<n;++i){
        in>>x>>y;
        g[y]++;
        l[x].push_back(y);
    }
    for(int i=1;i<=n;++i) if(g[i]==0) {rad=i; break;}
    dfs(rad);
    for(int i=1;i<=n;++i){
        out<<t[i]<<' ';
    }
    out<<'\n';
    return 0;
}