Pagini recente » Concursuri organizate de infoarena | Cod sursa (job #3144079) | Cod sursa (job #2386640) | Cod sursa (job #1135518) | Cod sursa (job #346083)
Cod sursa(job #346083)
#include <stdio.h>
#include <list>
using namespace std;
list<int>a[10000];
int aux[10000], stramosi[10000], maimuta[10000], v[10000], p[10000], nr=1;
void DF(int k, int niv);
int main() {
int i, n, x, y, radacina;
memset(aux, 1, sizeof(aux));
FILE *in=fopen("cerere.in","r"),*out=fopen("cerere.out","w");
fscanf(in, "%d", &n);
for(i=1; i<=n; i++) {
fscanf(in, "%d", &stramosi[i]);
}
for(i=1; i<=n-1; i++) {
fscanf(in, "%d%d", &x, &y);
a[x].push_back(y);
aux[y]=0;
}
for(i=1; i<=n; i++) {
if(aux[i]>0) {
radacina=i; break;
}
}
memset(v, -1, sizeof(v));
maimuta[1]=0; p[radacina]=0;
DF(radacina, 1);
for(i=radacina; i<n+radacina; i++) {
fprintf(out, "%d ", maimuta[p[i]]);
}
fclose(in); fclose(out);
return 0;
}
void DF(int k, int niv) {
for(list<int>::iterator it=a[k].begin(); it!=a[k].end(); it++) {
if(v[*it]==-1) {
v[*it]=1; nr++;
if(stramosi[*it]==0) {
maimuta[nr]=0;
}
else {
maimuta[nr]=maimuta[niv-stramosi[*it]]+1;
}
p[*it]=nr;
DF(*it, niv+1);
}
}
}