Cod sursa(job #2663107)

Utilizator bogdi1bogdan bancuta bogdi1 Data 25 octombrie 2020 13:27:05
Problema Cerere Scor 100
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#include <vector>
using namespace std;
vector<int> g[100005];
bool viz[100005];
bool f[100005];
vector<int> stiva;
int sol[100005];
int v[100005];
void dfs(int nod)
{
    viz[nod]=1;
    stiva.push_back(nod);
    if(v[nod]==0)
        sol[nod]=0;
    else
        sol[nod]=sol[stiva[stiva.size()-1-v[nod]]]+1;
    for(int i=0; i<g[nod].size(); i++)
        if(viz[g[nod][i]]==0)
            dfs(g[nod][i]);
    stiva.pop_back();
}
int main()
{   freopen("cerere.in", "r", stdin);
    freopen("cerere.out", "w", stdout);
    int n,i,x,y,j,poz;
    scanf("%d", &n);
    for(i=1; i<=n; i++)
        scanf("%d", &v[i]);
    for(i=1; i<n; i++){
        scanf("%d%d", &x, &y);
        g[x].push_back(y);
        g[y].push_back(x);
        f[y]=1;
    }
    for(i=1; i<=n && f[i]==1; i++);
    poz=i;
    dfs(poz);
    for(i=1; i<=n; i++)
        printf("%d ", sol[i]);
    return 0;
}