Pagini recente » Cod sursa (job #1930342) | Cod sursa (job #176468) | Cod sursa (job #577331) | Cod sursa (job #1524095) | Cod sursa (job #2952591)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int N = 1e5+5;
vector<int> a[N+5];
int n, k[N+5], t[N+5], sol[N+5], stramos[N+5];
void dfs(int x,int niv)
{
stramos[niv]=x;
if (k[x] == 0)
{
sol[x] = 0;
}
else
{
sol[x]=1+sol[stramos[niv-k[x]]];
}
for (auto i:a[x])
{
dfs(i,niv+1);
}
}
int main()
{
in>>n;
for (int i=1; i<=n; i++)
{
in>>k[i];
}
for (int i=1; i<=n; i++)
{
int x,y;
in>>x>>y;
a[x].push_back(y);
t[y]=x;
}
int rad;
for (int i=1; i<=n; i++)
{
if (t[i] == 0)
{
rad=i;
}
}
dfs(rad,1);
for (int i=1; i<=n; i++)
{
out<<sol[i]<<" ";
}
return 0;
}