Cod sursa(job #2205589)

Utilizator SpiristulTeribilStefan Vilcu SpiristulTeribil Data 19 mai 2018 15:51:20
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> a[100001] ;

int n, m, vf, v[100001], rasp[100001], st[100001], t[100001] ;
bool viz[100001] ;

void dfs(int x)
{
    st[++vf] = x ;
    if(v[x] == 0) {
        rasp[x] = 0 ;
    }
    else
        rasp[x] = rasp[st[vf - v[x]]] + 1 ;
    int y ;
    viz[x] = true ;
    for(int i = 0 ; i < a[x].size() ; i++)
    {
        y = a[x][i] ;
        if(!viz[y])
            dfs(y) ;
    }
    vf-- ;
}

int main()
{
    int x, y ;
    cin >> n ;
    for(int j = 1 ; j <= n ; j++) {
        cin >> v[j] ;
    }
    for(int j = 1 ; j < n ; j++)
    {
        cin >> x >> y ;
        t[y] = x ;
        a[x].push_back(y) ;
    }
    for(int i = 1 ; i <= n ; i++)
        if(t[i] == 0 )
        {
            dfs(i) ;
            break ;
        }
    for(int j = 1 ; j <= n ; j++)
        cout << rasp[j] <<' ' ;

    return 0 ;
}