Pagini recente » Cod sursa (job #161114) | Cod sursa (job #1056572) | Monitorul de evaluare | Sedinta 2007-11-07 | Cod sursa (job #282369)
Cod sursa(job #282369)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define FIN "sortaret.in"
#define FOUT "sortaret.out"
#define MAX_N 50015
#define PB push_back
#define SZ(A) (int)((A).size())
int N, M;
bool viz[MAX_N];
vector<int> lv[MAX_N];
vector<int> list;
void read() {
scanf("%d %d", &N, &M);
for (int i = 1; i <= M; ++i) {
int a, b;
scanf("%d %d", &a, &b);
lv[a].PB(b);
}
}
void DFS(int nod) {
viz[nod] = true;
for (int i = 0; i < SZ(lv[nod]); ++i)
if (!viz[lv[nod][i]])
DFS(lv[nod][i]);
list.PB(nod);
}
void solve() {
for (int i = 1; i <= N; ++i)
if (!viz[i])
DFS(i);
reverse(list.begin(), list.end());
for (int i = 0; i < N; ++i)
printf("%d ", list[i]);
}
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
read();
solve();
return 0;
}