Cod sursa(job #1033658)

Utilizator the@EyE@Postavaru Stefan the@EyE@ Data 17 noiembrie 2013 13:50:22
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<vector>
#define INF 100001

using namespace std;

vector<int> graph[INF];
int k[INF],ras[INF];
int n;
bool viz[INF];
vector<int> q;

void df(int nod)
{
    viz[nod]=true;
    q.push_back(nod);
    if(k[nod]>0)ras[nod]=ras[q[q.size()-k[nod]-1]]+1;
    for(int i=0;i<graph[nod].size();++i)if(!viz[graph[nod][i]])df(graph[nod][i]);
    q.pop_back();
}
bool check[INF];
int main()
{
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)scanf("%d",&k[i]);
    for(int i=1;i<n;++i)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        graph[a].push_back(b);
        check[b]=true;
    }
    int rad=1;
    for(int i=1;i<=n;++i)if(!check[i]){rad=i;break;}
    df(rad);
    for(int i=1;i<=n;++i)printf("%d ",ras[i]);

    return 0;
}