Pagini recente » Cod sursa (job #1082709) | Cod sursa (job #186268) | Cod sursa (job #141928) | Cod sursa (job #1886301) | Cod sursa (job #1888699)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int MaxN=100005;
int N, top;
vector<int> G[MaxN], iq(MaxN), st(MaxN), g(MaxN);
bool has_daddy[MaxN];
void Read();
void DFS(int x);
int main()
{
Read();
int i;
for(i=1;has_daddy[i] && i<=N;++i);
DFS(i);
for(int i=1;i<=N;++i)
fout<<g[i]<<' ';
fout.close();
return 0;
}
void Read()
{
fin>>N;
for(int i=1;i<=N;++i)
fin>>iq[i];
for(int i=1;i<=N;++i)
{
int x,y;
fin>>x>>y;
has_daddy[y]=true;
G[x].push_back(y);
}
fin.close();
}
void DFS(int x)
{
st[++top]=x;
if(iq[x])
g[x]=g[st[top-iq[x]]]+1;
for(const int y : G[x])
DFS(y);
--top;
}