Cod sursa(job #478479)

Utilizator andra23Laura Draghici andra23 Data 18 august 2010 21:04:42
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

int a[100010], n, c[100010], tata[100010], d[100010], viz[100010];
vector<int> son[100010];

int main(){
    ifstream f("cerere.in");
    ofstream g("cerere.out");
    int i, x, y, k, t;
    f>>n;
    for (i = 1; i <= n; i++)
        f>>a[i];
        
    for (i = 1; i <= n-1; i++){
        f>>x>>y;
        son[x].push_back(y);
        tata[y] = x;
    }
    
    int rad = 1;
    while (tata[rad] != 0)
        rad = tata[rad];
        
    int p = 1, u = 1;
    c[1] = rad;
    
    while (p <= u){
        x = c[p];
        viz[x] = 1;
        p++;
        k = a[x];
        if (k != 0){
            t = x;
            while (k != 0){
                t = tata[t];
                k--;
            }
            d[x] = d[t]+1;
        }
        for (i = 0; i < son[x].size(); i++)
            if (viz[son[x][i]] == 0){
                u++;
                c[u] = son[x][i];
        }   
    }
    
    for (i = 1; i <= n; i++)
        g<<d[i]<<" ";
       
    return 0;
}