Cod sursa(job #2046800)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 24 octombrie 2017 09:46:25
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

const int N=100001;
vector <int> a[N];
int n,v[N],nr,m,rez,tata[N],q[N],sol[N];
bool viz[N];
void citire()
{
    int x,y,i;
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    for(i=1; i<n; i++)
    {
        in>>x>>y;
        a[x].push_back(y);
        tata[y]=1;
    }
    in.close();
}

void dfs(int nod)
{
    int y;
    q[++nr]=nod;
    if(v[nod])
        sol[nod]=sol[q[nr-v[nod]]]+1;
    for(size_t i=0; i<a[nod].size(); i++)
    {
        y=a[nod][i];
        dfs(y);
    }
    --nr;
}

int main()
{
    citire();
    int i;
    for(i=1; i<=n && tata[i]; i++);
            dfs(i);
    for(i=1; i<=n; i++)
        out<<sol[i]<<" ";
    return 0;
}