Pagini recente » Cod sursa (job #2254452) | Cod sursa (job #2690560) | Cod sursa (job #635386) | Cod sursa (job #610763) | Cod sursa (job #2708782)
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
// Sortare topologica
queue<short> sorted;
vector<stack<short>> nodes;
short parents[50010];
void parcurge(short index) {
parents[index]--;
if (!parents[index]) {
sorted.push(index);
parents[index]--;
while (nodes[index].size()) {
parcurge(nodes[index].top());
nodes[index].pop();
}
}
}
int main() {
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
int n, m, x, y;
scanf("%d %d", &n, &m);
nodes = vector<stack<short>>(n + 1);
while (m--) {
scanf("%d %d", &x, &y);
nodes[x].push(y);
parents[y]++;
}
for (x = 1; x <= n; x++) {
if (!parents[x]) {
parents[x]++;
parcurge(x);
}
}
for (; sorted.size(); sorted.pop())
cout << sorted.front() << ' ';
return 0;
}