Cod sursa(job #293976)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 2 aprilie 2009 11:12:57
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
const long NMAX=50010;
const long MMAX=100010;
long n, m, d[NMAX], ext[NMAX], x[MMAX], y[MMAX], i, *a[NMAX], zero[NMAX], sol[NMAX], cont, nod, p, u;
int main()
{
	freopen("sortaret.in", "r", stdin);
	freopen("sortaret.out", "w", stdout);
	scanf("%ld%ld", &n, &m);
	for (i=0; i<m; i++)
	{
		scanf("%ld%ld", &x[i], &y[i]);
		d[x[i]]++;
		ext[y[i]]++;
	}//for i
	for (i=1; i<=n; i++)
	{
		a[i]=new long[d[i]+1];
		a[i][0]=0;
	}//for i
	for (i=0; i<m; i++)
		a[x[i]][++a[x[i]][0]]=y[i];
	for (i=1; i<=n; i++)
		if (!ext[i])
			zero[u++]=i;
	while (p<u)
	{
		nod=zero[p++];
		sol[cont++]=nod;
		for (i=1; i<=a[nod][0]; i++)
		{
			ext[a[nod][i]]--;
			if (ext[a[nod][i]]==0)
				zero[u++]=a[nod][i];
		}//for i
	}//while
	for (i=0; i<cont; i++)
		printf("%ld ", sol[i]);
	return 0;
}//main