Pagini recente » Cod sursa (job #632282) | Cod sursa (job #220303) | Cod sursa (job #298299) | Cod sursa (job #3180012) | Cod sursa (job #562567)
Cod sursa(job #562567)
#include<fstream>
#include<vector>
#include<bitset>
#define MAX 100001
using namespace std;
int N,V[MAX],R[MAX],niv = 0,ST[MAX];
vector<int> S[MAX];
bitset<MAX> viz;
void read()
{
ifstream f("cerere.in");
f>>N;
int i,x,y;
for(i=1;i<=N;++i)
f>>V[i];
for(i=1;i<N;++i)
{
f>>x>>y;
S[x].push_back(y);
viz[y] = 1;
}
f.close();
}
void df(int x)
{
++niv;
ST[niv] = x;
R[x] = R[ST[niv-V[x]]] + 1;
if(V[x] == 0)
R[x] = 0;
for(vector<int>::iterator it = S[x].begin();it!=S[x].end();++it)
{
df(*it);
}
--niv;
}
int main()
{
read();
int i;
for(i=1;i<=N;++i)
if(!viz[i])
{df(i);i=N+1;}
ofstream g("cerere.out");
for(niv = 1;niv<=N;++niv)
g<<R[niv]<<" ";
g.close();
return 0;
}