Cod sursa(job #431166)

Utilizator funkydvdIancu David Traian funkydvd Data 31 martie 2010 18:47:17
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define adauga_pe .push_back
#define foloseste using
#define spatierea namespace 
#define standard std
#define pentru(i,a,n) for (int i=a; i<=n; i++)
#define citeste scanf
#define scrie printf
#define deschide freopen
#define citire "r"
#define scriere "w"
#define intrare stdin
#define iesire stdout
#define numar_intreg int
#define  MAX 50010
#define numar_logic bool
#define intoarce return
#define daca if
#define functie void
#define meniu int main
#define creste ++
#define si &&
#define este ==
#define pentru_fiecare for_each
#define adevarat true
#define inceput begin
#define sfarsit end
#define fals false
#define devine =



foloseste spatierea standard;

vector<numar_intreg> G[MAX];

numar_intreg Gr[MAX];

numar_logic U[MAX];

numar_intreg n,m,i,x,y;

functie parcurgere_in_adancime(numar_intreg x)
{ 
	daca (U[x] este adevarat) intoarce;
	U[x] devine adevarat;
	pentru_fiecare (G[x].inceput(), G[x].sfarsit(), parcurgere_in_adancime);
	scrie("%d ", x);
}

meniu() 
{
  	deschide("sortaret.in", citire,intrare);
    	deschide("sortaret.out",scriere,iesire);
	citeste("%d %d", &n, &m);
	pentru(i,0,m-1)
	{
		citeste("%d %d", &x, &y);
		G[y] adauga_pe (x);
		Gr[x] creste;
	}
	pentru(i,1,n)
		daca ( U[i] este fals si Gr[i] este 0 ) parcurgere_in_adancime(i);
	intoarce 0;
}