Cod sursa(job #478750)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 20 august 2010 11:28:03
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#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;
}