Cod sursa(job #2653403)

Utilizator sebi_info1Olaru Sebastian sebi_info1 Data 28 septembrie 2020 00:58:48
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <iostream>
#include <unordered_map>
#include <vector>
 
using namespace std;
 
vector<int> sortaret(int N, const vector<vector<int>> &edges) {
	vector<int> L;
	vector<int> S;
	vector<int> inedges(N);
 
	for (int i = 0; i < N; ++i) {	
		for (int j : edges[i])
			inedges[j]++;
	}
 
	for (int i = 0; i < N; ++i) {
		if (inedges[i] == 0) {
			S.push_back(i);
		}
	}
 
	while (!S.empty()) {
		int n = S.back();
		S.pop_back();
		L.push_back(n);
 
		for (int m : edges[n]) {
			inedges[m]--;
			if (inedges[m] == 0)
				S.push_back(m);
		}
	}
 
	return L;
}
 
int main(int argc, char const *argv[])
{
	ifstream fin("sortaret.in");
	ofstream fout("sortaret.out");
 
	int N, M;
	fin >> N >> M;
 
	cout << N << ' ' << M << endl;
	vector<vector<int>> edges(N);
 
	for (int i = 0; i < M; ++i) {
		int X, Y;
		fin >> X >> Y;
		edges[X-1].push_back(Y-1);
	}
 
	vector<int> L = sortaret(N, edges);
	for (int n : L)
		fout << n+1 << ' ';
	fout << '\n';
 
	return 0;
}