Cod sursa(job #980446)

Utilizator smaraldaSmaranda Dinu smaralda Data 4 august 2013 18:16:17
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
#define NMAX 100000
int n,sol[NMAX+5],st[NMAX+5],k[NMAX+5];
vector <int> graph[NMAX+5];
bool vis[NMAX+5];

void dfs (int v) {
    int i;
    st[++st[0]]=v;
    vis[v]=1;
    if(k[v])
        sol[v]=sol[st[st[0]-k[v]]]+1;
    for(i=0;i<graph[v].size();i++)
        if(!vis[graph[v][i]])
            dfs(graph[v][i]);
    st[0]--;
}

int main() {
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);
    int i,a,b;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&k[i]);
    for(i=1;i<n;i++) {
        scanf("%d%d",&a,&b);
        graph[a].push_back(b);
        vis[b]=1;
        }
    for(i=1;i<=n;i++)
        if(!vis[i]) {
            memset(vis,0,sizeof(vis));
            dfs(i);
            break;
            }
    for(i=1;i<=n;i++)
        printf("%d ",sol[i]);
    return 0;
}