Cod sursa(job #1336886)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 8 februarie 2015 13:31:37
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

vector <int> v[nmax];
int n,viz[nmax],st[nmax];
int sol[nmax],k[nmax],niv;


void dfs(int x)
{
    for (vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++) {
            int y=*it;
            if (viz[y]==0) {
                    viz[y]=1;
                    st[++niv]=y;
                    if (k[y]!=0)
                        sol[y]=sol[st[niv-k[y]]]+1;

                    dfs(y);

                    st[niv]=0;
                    niv--;
            }
    }
}


int main()
{
    int i,a,b;
    f>>n;
    for (i=1;i<=n;i++)
        f>>k[i];
    for (i=1;i<=n-1;i++) {
        f>>a>>b;
        v[a].push_back(b);
    }



    for (i=1;i<=n;i++)
        if (viz[i]==0) {
            st[++niv]=i;
            viz[i]=1;
            dfs(i);
        }

    for (i=1;i<=n;i++) g<<sol[i]<<' ';

    return 0;
}