Cod sursa(job #796082)

Utilizator florin.ilieFlorin Ilie florin.ilie Data 10 octombrie 2012 16:47:06
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

using namespace std;

int n,m,a[1000000][100000000],u,ul;
int sol[10000000],c[100000000],viz[1000000000];
int ok[10000000];
void citire ()
{
	freopen("sortaret.in","r",stdin);
	int x,y;
	scanf("%d %d",&n,&m);
	for(int i=0;i<m;i++)
	{
		scanf("%d %d",&x,&y);
		a[x][y]=1;
		ok[y]=1;
	}
	for(int i=1;i<=n;i++)
		if(ok[i]==0){
			c[u++]=i;
		}
}
int ver(int x)
{
	for(int i=1;i<=n;i++)
		if(a[i][x]==1)
			return 0;
	return 1;
}
void parc ()
{
	for(int i=0;i<u;i++){
		viz[c[i]]=1;
		sol[ul++]=c[i];
		for (int j=1;j<=n;j++){
			if(a[c[i]][j]==1){
				a[c[i]][j]=0;
				if (ver(j))
					c[u++]=j;
			}
		}
	}
}
void afisare ()
{
	freopen("sortaret.out","w",stdout);
	for(int i=0;i<ul;i++)
		printf("%d ",sol[i]);
	printf("\n");
}
int main ()
{
	citire();
	parc();
	afisare();
	return 0;
}