Cod sursa(job #1153970)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 25 martie 2014 21:26:53
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
#include<vector>
#define NMAX 100100
using namespace std;

int v[NMAX],Sol[NMAX],N,radacina,Stack[NMAX];
bool tata[NMAX];
vector <int> Muchie[NMAX];

void citire() {

    ifstream in("cerere.in");
    int i,x,y;
    in>>N;
    for(i=1;i<=N;i++)
        in>>v[i];
    for(i=1;i<=N-1;i++){
        in>>x>>y;
        Muchie[x].push_back(y);
        tata[y]=1;
    }
    in.close();

}

void dfs(int nod) {

    int vecin,i;
    Stack[0]++;
    Stack[Stack[0]]=nod;
    if(v[nod])
        Sol[nod]=1+Sol[Stack[0]-v[nod]];
    for(i=0;i<Muchie[nod].size();i++){
        vecin=Muchie[nod][i];
        dfs(vecin);
    }
    Stack[0]--;

}

void solve() {

    int i;
    for(i=1;i<=N;i++)
        if(!tata[i])
            radacina=i;
    dfs(radacina);

}

void afisare() {

    ofstream out("cerere.out");
    int i;
    for(i=1;i<=N;i++)
        out<<Sol[i]<<' ';
    out<<'\n';
    out.close();

}

int main(){

    citire();
    solve();
    afisare();
    return 0;

}