Pagini recente » Cod sursa (job #1256742) | Cod sursa (job #1721096) | Cod sursa (job #3244670) | Cod sursa (job #1060865) | Cod sursa (job #2207852)
#include <cstdio>
#include <vector>
#define NMAX 50000
#define MMAX 100000
static std::vector<int> result;
static int n, m, adj[NMAX];
static bool visited[NMAX];
static struct edge {
int v, e;
} edges[MMAX+1];
static void dfs(int s)
{
int i;
visited[s] = true;
for (i = adj[s]; i; i = edges[i].e) {
if (!visited[edges[i].v]) {
dfs(edges[i].v);
}
}
result.push_back(s);
}
int main()
{
int u, v, i;
std::vector<int>::const_reverse_iterator crit;
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= m; i++) {
scanf("%d %d", &u, &v);
edges[i].v = v;
edges[i].e = adj[u];
adj[u] = i;
}
for (i = 1; i <= n; i++) {
if (!visited[i]) {
dfs(i);
}
}
for (crit = result.rbegin(); crit != result.rend(); crit++) {
printf("%d ", *crit);
}
return 0;
}