Pagini recente » Cod sursa (job #1898526) | Cod sursa (job #1186633) | Cod sursa (job #2439562) | Cod sursa (job #1176712) | Cod sursa (job #2595084)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <queue>
#include <list>
#include <vector>
#define MAX_NODES 50010
using namespace std;
void addEdge(vector<int> lg[], int u, int v) {
lg[u].push_back(v);
}
void dfs(vector<int> lg[], int node, int N, int *visited, int *t_desc, int *t_fin, int *time, queue<int> *q) {
visited[node] = 1;
t_desc[node] = *time;
(*time)++;
for (int i = 1; i <= N; ++i) {
if (visited[i] == 0) {
dfs(lg, i, N, visited, t_desc, t_fin, time, q);
}
}
t_fin[node] = *time;
(*time)++;
(*q).push(node);
}
int main() {
ifstream in("sortaret.in");
ofstream out("sortaret.out");
int N, M, time = 0;
int sur, des;
queue<int> q;
in >> N >> M;
vector<int> lg[N+1];
int visited[N+1] = {0}, t_desc[N+1], t_fin[N+1];
for (int i = 0; i < M; ++i) {
in >> sur >> des;
addEdge(lg, sur, des);
}
dfs(lg, 1, N, visited, t_desc, t_fin, &time, &q);
while (!q.empty()) {
out << q.front() << ' ';
q.pop();
}
in.close();
out.close();
return 0;
}