Cod sursa(job #943770)

Utilizator matei_cChristescu Matei matei_c Data 26 aprilie 2013 13:12:53
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std ;

#define maxn 100001

int n ;
int v[maxn], sol[maxn], tata[maxn] ;

bool sel[maxn] ;

vector<int> graf[maxn] ;
vector<int> coada ;

int rad = 1 ;

void dfs(int nod)
{
    sel[nod] = true ;
    coada.push_back( nod ) ;

    if( v[nod] == 0 )
        sol[nod] = 0 ;
    else
        sol[nod] = sol[ coada[ coada.size() - 1 - v[nod] ] ] + 1 ;

    for(size_t i = 0; i < graf[nod].size(); ++i )
        if( sel[ graf[nod][i] ] == false )
            dfs( graf[nod][i] ) ;

    coada.pop_back() ;
}

void citire()
{
    freopen("cerere.in", "r", stdin);
    freopen("cerere.out", "w", stdout);

    cin >> n ;

    for(int i = 1; i <= n; ++i )
        cin >> v[i] ;

    for(int i = 1; i < n; ++i )
    {
        int a, b ;

        cin >> a >> b ;
        tata[b] = a ;
        graf[a].push_back( b ) ;
    }
}

void afla_radacina()
{
    sol[0] = -1 ;

    while( tata[rad] != 0 )
        rad = tata[rad] ;
}

void afisare()
{
    for(int i = 1; i <= n; ++i )
        cout << sol[i] << " " ;
}

int main()
{
    citire() ;

    //afla_radacina() ;

    //dfs( rad ) ;

    //afisare() ;

    return 0 ;

}