Cod sursa(job #352471)

Utilizator capmIonut Vasilescu capm Data 1 octombrie 2009 23:00:44
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <vector>
#include <string.h>

using namespace std;

vector<int> v[50001];
int sol[50001], cnt;
bool used[50001];

void dfs(int);

int main()
{
	freopen("sortaret.in", "r", stdin);
	freopen("sortaret.out", "w", stdout);

	int n, m, i, a, b;
	
	scanf("%d %d", &n, &m);
	cnt = n;
	memset(used, 0, sizeof(used));
	
	for(i = 1; i <= m; ++i)
	{
		scanf("%d %d", &a, &b);
		v[a].push_back(b);
		used[b] = 1;
	}
	for(i = 1; i <= n; ++i)
	{
		if(!used[i])
		{
			v[0].push_back(i);
		}
	}

	memset(used, 0, sizeof(used));
	dfs(0);

	for(i = 1; i <= n; ++i)
	{
		printf("%d ", sol[i]);
	}
	printf("\n");
	return 0;
}

void dfs(int nod)
{
	used[nod] = 1;
	for(vector<int> :: iterator it = v[nod].begin(); it != v[nod].end(); ++it)
	{
		if(!used[*it])
		{
			dfs(*it);
		}
	}
	sol[cnt--] = nod;
}