Pagini recente » Cod sursa (job #2807718) | Cod sursa (job #2068002) | Cod sursa (job #96619) | Cod sursa (job #1972695) | Cod sursa (job #1035444)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v[100000];
int rad, q[100000], cred[100000], g[100000], prim, ultim, k=0, nr[100000];
bool viz[100000];
void DF(int nod)
{
int i;
ultim++;
q[ultim]=nod;
cred[nod]=cred[q[ultim-g[nod]]];
nr[nod]=nr[q[ultim-g[nod]]]+1;
int z=v[nod].size();
for(i=0; i<z; i++)
{ DF(v[nod][i]);}
ultim--;
}
int main()
{
int n, i, x, y;
FILE *fin, *fout;
fin=fopen("cerere.in", "r");
fout=fopen("cerere.out", "w");
fscanf(fin, "%d", &n);
for(i=1; i<n+1; i++)
{fscanf(fin, "%d", &g[i]); viz[i]=false;}
for(i=1; i<n; i++)
{
fscanf(fin, "%d%d", &x, &y);
v[x].push_back(y);
viz[y]=true;
}
for(i=1; i<n+1;i++)
if(viz[i]==false)
rad=i;
for(i=1; i<n+1; i++)
{cred[i]=i; nr[i]=0;}
prim=1; ultim=0;
DF(rad);
for(i=1; i<n+1; i++)
fprintf(fout, "%d ", nr[i]-1);
}