Cod sursa(job #2653035)

Utilizator raikadoCri Lu raikado Data 26 septembrie 2020 18:26:29
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 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;
}