Cod sursa(job #1076562)

Utilizator mazaandreiAndrei Mazareanu mazaandrei Data 10 ianuarie 2014 13:05:16
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<fstream>
#include<vector>
using namespace std;
int rad,k[100005],t[100005],g[100005],rasp[100005],x,y,n;
ifstream in("cerere.in"); ofstream out("cerere.out");
vector <int> l[100005];
int maimuta(int nod, int cost){
    if(nod==rad || k[nod]==0){ rasp[nod]=0; return cost;}
    if(rasp[nod]!=0) return cost;
    int crt=nod;
    rasp[nod]=cost;
    for(int i=1;i<=k[nod];++i) crt=t[crt];
    return maimuta(crt,cost+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;
        g[y]++;
        t[y]=x;
        l[x].push_back(y); l[y].push_back(x);
    }
    for(int i=1;i<=n;++i) if(g[i]==0) rad=i;
    for(int i=1;i<=n;++i)
        out<<maimuta(i,0)<<' ';
    out<<'\n';
    return 0;
}