Pagini recente » Cod sursa (job #2916965) | Cod sursa (job #492927) | Cod sursa (job #315205) | Cod sursa (job #1880911) | Cod sursa (job #1114553)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
struct arc
{
int x, y;
};
arc regula[100001];
int pred[50001];
vector <int> suc[50001];
int sol[50001];
queue <int> q;
bool comp(arc a, arc b)
{
return a.x<b.x || (a.x==b.x && a.y<=b.y);
}
int main()
{
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
int n, m, x, y, l=0, temp, a, b;
scanf("%d%d", &n, &m);
for(int i=0;i<=n;i++)
suc[i].push_back(0);
for(int i=1;i<=m;i++)
{
scanf("%d%d", &x, &y);
regula[i].x=x;
regula[i].y=y;
}
sort(regula, regula+m, comp);
for(int i=1;i<=m;i++)
{
a=regula[i].x;b=regula[i].y;
if(a!=regula[i-1].x || b!=regula[i-1].y)
{
pred[b]++;
suc[a].push_back(b);
suc[a][0]++;
}
}
for(int i=1;i<=n;i++)
if(pred[i]==0)
q.push(i);
while(!q.empty())
{
temp=q.front();
sol[l++]=temp;
for(int i=1;i<suc[temp].size();i++)
{
pred[suc[temp][i]]--;
if(pred[suc[temp][i]]==0)
q.push(suc[temp][i]);
}
q.pop();
}
for(int i=0;i<l;i++)
printf("%d ", sol[i]);
return 0;
}