Pagini recente » Borderou de evaluare (job #2970287) | Borderou de evaluare (job #194376) | Borderou de evaluare (job #1111697) | Borderou de evaluare (job #2294825) | Cod sursa (job #1328062)
#include <fstream>
#include <vector>
#include <algorithm>
#define Nmax 50100
#define neighbour Graph[node][i]
using namespace std;
vector <int> Graph[Nmax];
int N, Index, Order[Nmax];
bool seen[Nmax];
void Dfs(int node) {
seen[node] = true;
for(int i = 0; i < Graph[node].size(); i++)
if(!seen[neighbour])
Dfs(neighbour);
Order[++Index] = node;
}
void Solve() {
for(int i = 1; i <= N; i++)
if(!seen[i])
Dfs(i);
reverse(Order + 1, Order + N + 1);
}
void Read() {
int x, y, M;
ifstream in("sortaret.in");
in >> N >> M;
while(M--) {
in >> x >> y;
Graph[x].push_back(y);
}
in.close();
}
void Write() {
ofstream out("sortaret.out");
for(int i = 1; i <= N; i++)
out << Order[i] << ' ';
out << '\n';
out.close();
}
int main() {
Read();
Solve();
Write();
return 0;
}