Pagini recente » Cod sursa (job #2720461) | Cod sursa (job #2760306) | Cod sursa (job #2849945) | Cod sursa (job #1179916) | Cod sursa (job #3271372)
#include <fstream>
#include <vector>
#include <queue>
int main() {
std::ifstream fin("sortaret.in");
std::ofstream fout("sortaret.out");
int n, m; fin >> n >> m;
std::vector<int> inDegree(n, 0);
std::vector<std::vector<int>> graph(n, std::vector<int>());
for (int i = 0; i < m; i += 1) {
int u, v; fin >> u >> v; u -= 1, v -= 1;
graph[u].emplace_back(v);
inDegree[v] += 1;
}
std::queue<int> q;
for (int i = 0; i < n; i += 1) {
if (inDegree[i] == 0) {
q.push(i);
}
}
std::vector<int> topSort;
while (!q.empty()) {
int currNode = q.front(); q.pop();
topSort.emplace_back(currNode);
for (int& next : graph[currNode]) {
inDegree[next] -= 1;
if (inDegree[next] == 0) {
q.push(next);
}
}
}
for (int& node : topSort) {
fout << node + 1 << ' ';
}
inDegree.clear(), graph.clear();
fin.close(), fout.close();
return 0;
}