Pagini recente » Cod sursa (job #2839846) | Cod sursa (job #112970) | Cod sursa (job #3156688) | Cod sursa (job #1746183) | Cod sursa (job #1189341)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 100005
vector < int > L[NMAX];
int P[NMAX],finalFather[NMAX],startFather[NMAX];
bool sel[NMAX];
int N,M,i,x,Lg,y;
bool cmp(int x,int y)
{
return finalFather[x]>finalFather[y];
}
void DF(int nod)
{
sel[nod]=true;
startFather[nod]=++Lg;
for ( vector < int > :: iterator it=L[nod].begin();it!=L[nod].end();++it)
{
if (sel[*it]) continue;
DF(*it);
}
finalFather[nod]=++Lg;
P[nod]=nod;
}
int main()
{
freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
scanf("%d%d",&N,&M);
for (i=1;i<=M;++i)
{
scanf("%d",&x);
scanf("%d",&y);
L[x].push_back(y);
}
for (i=1;i<=N;++i)
{
if (sel[i]) continue;
DF(i);
}
sort(P+1,P+N+1,cmp);
for (i=1;i<=N;++i) printf("%d ",P[i]);
printf("\n");
return 0;
}