Cod sursa(job #1949975)

Utilizator Lungu007Lungu Ionut Lungu007 Data 2 aprilie 2017 16:36:13
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <vector>
#include <fstream>
#define NMAX 100005

using namespace std;

ifstream in("cerere.in");
ofstream out("cerere.out");

int n,m,c[NMAX],t[NMAX],viz[NMAX],x,y,cost;
vector<int> a[NMAX];

int calcStr(int nod) {
    int contor = 0,lim;
    while(c[nod] != 0) {
        lim = c[nod];
        for(int i=0;i<lim;i++) {
            nod = t[nod];
        }
        contor+=1;

    }

    return contor;
}

void dfs(int nod) {
    viz[nod] = 1;

    for(int i=0;i<a[nod].size();i++) {
        if(!viz[a[nod][i]]){
            dfs(a[nod][i]);
            t[a[nod][i]]= nod;
        }
    }
}

int main()
{
    in >> n;
    for(int i=1;i<=n;i++) {
        in >> c[i];
    }

    for(int i=1;i<n;i++) {
        in >> x >> y;
        a[x].push_back(y);
        a[y].push_back(x);
    }

    dfs(1);

    for(int i=1;i<=n;i++) {
        //cout << t[i] << " ";
        out << calcStr(i) << " ";
    }//
    //cout << calcStr(4);
    return 0;
}