Cod sursa(job #377323)

Utilizator GotenAmza Catalin Goten Data 23 decembrie 2009 23:58:09
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream.h>
#include<iostream.h>

int c[51000],m,n,i,v[101000][2],x,y,start[51000],grad[51000],p,u,t,pus[51000],tt;

int main()
{
	ifstream f("sortaret.in");
	ofstream g("sortaret.out");
	f>>n>>m;
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		v[i][0]=y;
		v[i][1]=start[x];
		start[x]=i;
		grad[y]++;
	}
	p=1;
	for(i=1;i<=n;i++)
		if(!grad[i])
		{
			c[++u]=i;
			pus[i]=1;
			t=start[i];
			while(t)
			{
				grad[v[t][0]]--;
				t=v[t][1];
			}
		}
	for(i=p;i<=u&&p<=n;i++)
	{ 
		t=start[c[i]];
		while(t)
		{
			if(!grad[v[t][0]]&&!pus[v[t][0]])
			{
				c[++u]=v[t][0];
				pus[v[t][0]]=1;
				tt=start[v[t][0]];
				while(tt)
				{
					if(grad[v[tt][0]])
						grad[v[tt][0]]--;
					tt=v[tt][1];
				}
			}
			t=v[t][1];
		}
	}
	for(i=1;i<=n;i++)
		g<<c[i]<<' ';
	return 0;
}