Pagini recente » Cod sursa (job #2374371) | Cod sursa (job #1873500) | Cod sursa (job #649268) | Monitorul de evaluare | Cod sursa (job #3334886)
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
void topoSort() {
ifstream cin("sortaret.in");
ofstream cout("sortaret.out");
int n, m;
cin >> n >> m;
vector<vector<int>> graf(n + 1);
vector<int> grad(n + 1, 0);
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
grad[y]++;
graf[x].push_back(y);
}
queue<int> q; // Pentru minim lexicografic trebuie priority_queue
for (int i = 1; i <= n; i++) {
if (grad[i] != 0) continue;
q.push(i);
}
vector<int> result;
while (!q.empty()) {
int x = q.front();
q.pop();
result.push_back(x);
for (auto y : graf[x]) {
grad[y]--;
if (grad[y] != 0) continue;
q.push(y);
}
}
for (auto x : result) {
cout << x << " ";
}
cout << endl;
}
int main() {
topoSort();
return 0;
}