Pagini recente » Rating Daniel Asimionesei (DanielAsimionesei) | Cod sursa (job #982540) | Cod sursa (job #1396551) | Cod sursa (job #937004) | Cod sursa (job #3032689)
#include <fstream>
#include <stack>
using namespace std;
ifstream cin("sortaret.in");
ofstream cout("sortaret.out");
const int N = 50000;
const int M = 1e5;
stack <int> S;
struct element
{
int vf, urm;
}v[M + 1];
int lst[N + 1], nr, n, m, vizitat[N + 1];
void adauga(int x, int y)
{
v[++nr].vf = y;
v[nr].urm = lst[x];
lst[x] = nr;
}
void dfs(int x)
{
vizitat[x] = 1;
for(int p = lst[x]; p != 0; p = v[p].urm)
{
int y = v[p].vf;
if(!vizitat[y])
dfs(y);
}
S.push(x);
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
adauga(x, y);
}
for(int i = 1; i <= n; i++)
if(!vizitat[i])
dfs(i);
while(!S.empty())
{
int q = S.top();
S.pop();
cout << q << " ";
}
return 0;
}