Pagini recente » Cod sursa (job #29522) | Cod sursa (job #1989318) | Cod sursa (job #365988) | Cod sursa (job #3260522) | Cod sursa (job #2723233)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
const int NMAX = 1e5 + 1;
int N, M;
bool Sel[NMAX];
vector < int > G[NMAX];
vector < int > S;
static inline void Read ()
{
f.tie(nullptr);
f >> N >> M;
for(int i = 1; i <= M; ++i)
{
int X = 0, Y = 0;
f >> X >> Y;
G[X].push_back(Y);
}
return;
}
static inline void DFS_1 (int Node)
{
Sel[Node] = 1;
for(auto it : G[Node])
if(!Sel[it])
DFS_1(it);
S.push_back(Node);
return;
}
static inline void TopoSort ()
{
for(int i = 1; i <= N; ++i)
if(!Sel[i])
DFS_1(i);
reverse(S.begin(), S.end());
return;
}
static inline void Solve ()
{
TopoSort();
for(int i = 0; i < N; ++i)
{
g << S[i];
if(i != N)
g << ' ';
}
g << '\n';
return;
}
int main()
{
Read();
Solve();
return 0;
}