Pagini recente » Cod sursa (job #358540) | Cod sursa (job #2902785) | Cod sursa (job #188957) | Cod sursa (job #1881421) | Cod sursa (job #1357095)
// QQQ
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
#define MAX_N 50010
#define UNTOUCHED 0
#define VISITED 1
#define DONE 2
typedef struct _node {
int state;
} node;
vector<int> edges[MAX_N];
int state[MAX_N];
stack<int> result;
void dfs(int node)
{
state[node] = VISITED;
for (vector<int>::iterator it = edges[node].begin(); it != edges[node].end(); ++it)
{
if (state[*it] == UNTOUCHED)
{
dfs(*it);
}
}
state[node] = DONE;
result.push(node);
}
int main()
{
int n, m;
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
cin >> n >> m;
for (int i = 0; i < m; ++i)
{
int from, to;
cin >> from >> to;
edges[from].push_back(to);
}
// topo
for (int i = 1; i < n; ++i)
{
if (state[i] == UNTOUCHED)
{
dfs(i);
}
}
{
while (!result.empty())
{
int node = result.top();
cout << node << " ";
result.pop();
}
}
return 0;
}