Pagini recente » Cod sursa (job #3283836) | Cod sursa (job #3261333) | Cod sursa (job #348175) | Cod sursa (job #3202093) | Cod sursa (job #854445)
Cod sursa(job #854445)
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
struct nod
{
int tata;
int nr;
int* copii;
int nr_copii;
};
int* s; int *m; int* rez;
int n; nod* maim;
int stramosk(int nr, int k)
{
int st, i;
st = nr;
for(i=0; i<k; i++)
{
st = maim[st].tata;
}
return st;
}
int parcurge(int nr)
{
int st = stramosk(nr, s[nr]);
if(s[nr] == 0) rez[nr] = 0;
else rez[nr] = rez[st]+1;
int i;
for(i=0; i<maim[nr].nr_copii; i++) parcurge(maim[nr].copii[i]);
return 0;
}
int main()
{
int a, b, i;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
fin>>n;
s = new int[n+4];
rez = new int[n+4];
maim = new nod[n+4];
for(i=1; i<n+1; i++)
{
maim[i].tata = 0;
maim[i].nr = i;
maim[i].copii = 0;
maim[i].nr_copii = 0;
}
for(i=1; i<n+1; i++) fin>>s[i];
for(i=1; i<n; i++)
{
fin>>a; fin>>b;
maim[a].copii = (int*)realloc(maim[a].copii, sizeof(int));
m = maim[a].copii;
m[maim[a].nr_copii] = b;
maim[a].nr_copii++;
maim[b].tata = a;
}
for(i=1; i<n+1; i++)
{
if(maim[i].tata == 0)
{
parcurge(i);
}
}
for(i=1; i<=n; i++) fout<<rez[i]<<" ";
return 0;
}