Pagini recente » Cod sursa (job #2904262) | Cod sursa (job #1994037) | Cod sursa (job #1716864) | n | Cod sursa (job #950751)
Cod sursa(job #950751)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int N,M,S,x,y,v[50100],fringe[100100],r[50100];
vector <int> a[50100];
struct ord
{
int poz;
int val;
}s[50100];
bool cmp(ord a, ord b)
{
return a.val<b.val;
}
int main()
{
freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=M;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
v[y]=-1;
}
for(int j=1;j<=N;++j)
if(v[j]==0)
{
int first=1;
int last=1;
fringe[first]=j;
while(first<=last)
{
x=a[fringe[first]].size();
for(int i=0;i<x;++i)
{
++last;
fringe[last]=a[fringe[first]][i];
v[fringe[last]]=v[fringe[first]]+1;
}
++first;
}
}
for(int i=1;i<=N;++i)
{
++r[v[i]];
}
for(int i=1;i<=N;++i)
r[i]=r[i]+r[i-1];
for(int i=1;i<=N;++i)
{
s[i].poz=i;
s[i].val=r[v[i]];
--r[v[i]];
}
sort(s+1,s+N+1,cmp);
for(int i=1;i<=N;++i)
{
printf("%d ",s[i].poz);
}
return 0;
}