Pagini recente » Cod sursa (job #65904) | Cod sursa (job #2191250) | Cod sursa (job #2571522) | Cod sursa (job #2662266) | Cod sursa (job #2431704)
#include <fstream>
#include <assert.h>
#include <stack>
#include <vector>
#include <list>
std::ifstream in("sortaret.in");
std::ofstream out("sortaret.out");
void dfs(int src, std::vector<bool> &visited, std::list<int> *adj, std::stack<int> &stack) {
visited[src] = true;
for (auto it = adj[src].begin(); it != adj[src].end() ; ++it) {
if (!visited[*it]) {
visited[*it] = true;
dfs(*it, visited, adj, stack);
}
}
stack.push(src);
}
int main() {
int n, m, src, dest;
std::stack<int> stack;
in >> n >> m;
assert(1 <= n && n <= 50000);
assert(1 <= m && m <= 100000);
std::vector<bool> visited(n, false);
std::list<int> *adj = new std::list<int>[n + 1];
for(; m ; --m) {
in >> src >> dest;
adj[src].push_back(dest);
}
for (int i = 1 ; i <= n ; ++i) {
if (!visited[i]) {
dfs(i, visited, adj, stack);
}
}
while (!stack.empty()) {
int node = stack.top();
stack.pop();
out << node << " ";
}
return 0;
}