Pagini recente » Cod sursa (job #2645694) | Cod sursa (job #1826227) | Cod sursa (job #2063452) | Cod sursa (job #2170629) | Cod sursa (job #3158437)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int r = 0;
vector<int> mat[100001];
vector<int> v;
int N;
bool p[100001];
int K[100001];
int S[100001];
int G[100001];
int viz[100001];
void dfs(int c)
{
for(int it : mat[c])
{
if(viz[it] == 0)
{
viz[it] = 1;
v.push_back(it);
if(K[it] > 0)
{
S[it] = v[v.size() - K[it]-1];
G[it] = G[S[it]] + 1;
}
dfs(it);
v.pop_back();
}
}
}
int main()
{
cin >> N;
for(int i = 1; i<=N; i++)
cin >> K[i];
int a, b;
while(cin >> a >> b)
{
mat[a].push_back(b);
p[b] = 1;
}
for(int i = 1; i<=N; i++)
if(p[i] == 0)
{
r = i;
break;
}
viz[r] = 1;
v.push_back(r);
dfs(r);
for(int i = 1; i<=N; i++)
{
cout << G[i] << ' ';
}
}