Pagini recente » Cod sursa (job #3227227) | Cod sursa (job #2424290) | Cod sursa (job #2776497) | Cod sursa (job #655400) | Cod sursa (job #810573)
Cod sursa(job #810573)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N=100001;
vector <int> v[N];
int n, sol[N], k[N], a[N];
bool r[N];
void citire()
{
int iTemp1, iTemp2;
in>>n;
for(int i=1;i<=n;i++)
in>>k[i];
for(int i=0;i<n-1;i++)
{
in>>iTemp1>>iTemp2;
v[iTemp1].push_back(iTemp2);
r[iTemp2]=1;
}
}
void dfs(size_t x, int lvl)
{
if(!k[x])
{
sol[x]=0;
a[lvl]=0;
}
else
{
sol[x]=a[lvl-k[x]]+1;
a[lvl]=a[lvl-k[x]]+1;
}
for(size_t i=0;i<v[x].size();i++)
dfs(v[x][i],lvl+1);
}
int radacina()
{
for(int i=1;i<N;i++)
if(!r[i])
return i;
return -1;
}
int main()
{
citire();
dfs(radacina(),0);
for(int i=1;i<=n;i++)
out<<sol[i]<<' ';
in.close();
out.close();
return 0;
}