Pagini recente » Cod sursa (job #589090) | Cod sursa (job #1257077) | Cod sursa (job #824798) | Cod sursa (job #1324584) | Cod sursa (job #1341709)
#include <cstdio>
#include <vector>
#include <stack>
#define NMAX 50010
using namespace std;
vector<int> arcs[NMAX];
int visited[NMAX];
int n,m;
void Read()
{
freopen("sortaret.in","r",stdin);
int a,b;
scanf("%d %d",&n,&m);
for(int i=0;i<m;++i)
{
scanf("%d %d",&a,&b);
arcs[a].push_back(b);
}
}
stack<int> lifo;
void TopologicalSortUtil(int node)
{
visited[node]=1;
vector<int>::iterator it;
for(it=arcs[node].begin();it!=arcs[node].end();++it)
{
if(!visited[*it])
{
TopologicalSortUtil(*it);
}
}
lifo.push(node);
}
void TopologicalSort()
{
for(int i=1;i<=n;++i)
{
visited[i]=0;
}
for(int i=1;i<=n;++i)
{
if(!visited[i])
{
TopologicalSortUtil(i);
}
}
}
void Write()
{
freopen("sortaret.out","w",stdout);
while(!lifo.empty())
{
printf("%d ",lifo.top());
lifo.pop();
}
printf("\n");
}
int main()
{
Read();
TopologicalSort();
Write();
return 0;
}