Cod sursa(job #1083254)

Utilizator WyvernFMI Stanescu Leonard Wyvern Data 15 ianuarie 2014 19:44:47
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.66 kb
#include <stdio.h>
#include <vector>
#include <fstream>
using namespace std;
ifstream fi("cerere.in");
ofstream fo("cerere.out");
vector<int>e[100002];
int k[100002],g[100002],nr[100002],s[100002],x,y,i,n;
char v[100002];
void df(int x) {
    v[x]=1;
    s[++s[0]]=x;
    if(k[x]!=0) nr[x]=1+nr[s[s[0]-k[x]]];
    for(int i=0;i<(int)e[x].size();i++)
        if(!v[e[x][i]]) df(e[x][i]);
    s[0]--;
}
int main() {
    fi>>n;
    for(i=1;i<=n;i++) fi>>k[i];
    for(i=1;i<n;i++) {
        fi>>x>>y;
        e[x].push_back(y);
        g[y]++;
    }
    for(i=1;i<=n;i++)
        if(g[i]==0) df(i);
    for(i=1;i<=n;i++) fo<<nr[i]<<' ';
    return 0;
}