Pagini recente » Cod sursa (job #279262) | Cod sursa (job #75401) | Cod sursa (job #611589) | Cod sursa (job #124178) | Cod sursa (job #3136799)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <stack>
#include <queue>
using namespace std;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
const int mxN = 5e4 + 5;
int n, m;
bool vis[mxN];
vector<int> adj[mxN];
int inDegree[mxN];
void readInput() {
fin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
fin >> u >> v;
adj[u].push_back(v);
inDegree[v]++;
}
}
void predecessorCounting() {
queue<int> Q;
for (int i = 1; i <= n; i++) {
if (inDegree[i] == 0) {
Q.push(i);
}
}
vector<int> topSort;
while (!Q.empty()) {
int u = Q.front();
Q.pop();
topSort.push_back(u);
for (auto v : adj[u]) {
inDegree[v]--;
if (inDegree[v] == 0) {
Q.push(v);
}
}
}
for (auto u : topSort) {
fout << u << " ";
}
}
int main() {
readInput();
predecessorCounting();
return 0;
}