Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #351551) | Cod sursa (job #3226489) | Cod sursa (job #1575042)
#include <iostream>
#include <fstream>
#include <queue>
#define MAXN 50005
using namespace std;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int n, m;
int grad[MAXN];
queue <int> Q;
struct cell
{
int info;
cell *next;
} *gr[MAXN];
void add(int a, int b)
{
cell *q = new cell;
q->info = b;
q->next = gr[a];
gr[a] = q;
}
void sortTop()
{
for (int i = 1; i <= n; ++i)
if (grad[i] == 0)
{
fout << i << ' ';
Q.push(i);
}
while (!Q.empty())
{
cell *q = gr[Q.front()];
Q.pop();
while (q)
{
grad[q->info]--;
if (grad[q->info] == 0)
{
fout << q->info << ' ';
Q.push(q->info);
}
q = q->next;
}
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; ++i)
{
int a, b;
fin >> a >> b;
add(a, b);
grad[b]++;
}
sortTop();
return 0;
}