Pagini recente » Cod sursa (job #2264922) | Cod sursa (job #1113272) | Cod sursa (job #3226244) | Cod sursa (job #2229200) | Cod sursa (job #1889572)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int NMAX = 100005;
vector <int> fii[NMAX];
int k[NMAX], g[NMAX], stiva[NMAX];
bool aretata[NMAX];
int cnt = 0;
vector <int> ::iterator it;
void dfs(int x)
{
cnt++;
stiva[cnt] = x;
if(k[x] == 0)
g[x] = 0;
else
g[x] = g[stiva[cnt - k[x]]] + 1;
vector <int> ::iterator it;
for(it = fii[x]. begin(); it < fii[x].end(); ++it)
dfs(*it);
cnt--;
}
int main()
{
int n, i;
in >> n;
for(i = 1; i <= n; i++)
in >> k[i];
int a, b;
for(i = 1; i <= n; i++)
{
in >> a >>b;
fii[a].push_back(b);
aretata[b] = 1;
}
int rad = 0;
for(i = 1; i <= n && rad == 0; i++)
if(aretata[i] == 0)
rad = i;
dfs(rad);
for(i= 1; i <= n; i++)
out <<g[i]<<" ";
return 0;
}