Pagini recente » Cod sursa (job #174597) | Cod sursa (job #549554) | Cod sursa (job #1877812) | Cod sursa (job #3178843) | Cod sursa (job #478750)
Cod sursa(job #478750)
#include <cstdio>
#include <bitset>
#include <vector>
#define maxN 100005
using namespace std;
bitset <maxN> viz;
int vf, N, dist[maxN], mk[maxN], st[maxN];
vector <int> g[maxN];
void df (int node)
{
viz[node] = 1;
for (int i = 0; i < g[node].size (); i++)
{
int X = g[node][i];
if (!viz[X])
{
st[++vf] = X;
if (mk[X])
dist[X] = dist[st[vf - mk[X]]] + 1;
df (g[node][i]);
--vf;
}
}
}
int main ()
{
freopen ("cerere.in", "r", stdin);
freopen ("cerere.out", "w", stdout);
int i, a, b;
scanf ("%d\n", &N);
for (i = 1; i <= N; i++) scanf ("%d", &mk[i]);
for (i = 1; i <= N; i++)
{
scanf ("%d%d\n", &a, &b);
g[a].push_back (b);
}
for (i = 1; i <= N; i++)
if (viz[i] == 0)
{
st[++vf] = i;
df (i);
}
for (i = 1; i <= N; i++)
printf ("%d ", dist[i]);
return 0;
}