Cod sursa(job #1671668)

Utilizator Player1Player 1 Player1 Data 1 aprilie 2016 23:45:19
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <vector>
#include <stack>

using namespace std;

vector<int> vecini[50001];
bool color[50001] = {0};
stack<int> myStack;

void DFS(int index){
	color[index] = 1;
	for(int i = 0; i < vecini[index].size(); i++){
		if(color[vecini[index][i]] == 0)
			DFS(vecini[index][i]);
	}
	color[index] = 2;
	myStack.push(index);
}

int main(){
	freopen("sortaret.in", "r", stdin);
	freopen("sortaret.out", "w", stdout);
	int N, M, x, y;
	scanf("%d %d ", &N, &M);
	for(int i = 0; i < M; i++){
		scanf("%d %d ", &x, &y);
		vecini[x].push_back(y);
	}
	for(int i = 0; i <= M; i++){
		if(color[i] == 0)
			DFS(i);
	}
	while(!myStack.empty()){
		printf("%d ",myStack.top());
		myStack.pop();
	}
	
	return 0;
}