Pagini recente » Cod sursa (job #1342096) | Cod sursa (job #60986) | Cod sursa (job #3142925) | Cod sursa (job #1174997) | Cod sursa (job #811388)
Cod sursa(job #811388)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 50010
int N, M;
int out_degree[NMAX];
vector <int> graph[NMAX];
void read_data () {
cin >> N >> M;
int x, y;
for (int i = 0; i < M; i++) {
cin >> x >> y;
graph[y].push_back (x);
out_degree[x]++;
}
}
void sortaret () {
queue <int> Q;
vector <int> sol;
for (int i = 1; i <= N; i++)
if (out_degree[i] == 0)
Q.push (i);
int node;
for (; !Q.empty (); Q.pop ()) {
node = Q.front ();
sol.push_back (node);
for (vector <int>::iterator it = graph[node].begin (); it != graph[node].end (); it++) {
out_degree[*it]--;
if (out_degree[*it] == 0)
Q.push (*it);
}
}
for (int i = sol.size () - 1; i >= 0; i--)
cout << sol[i] << ' ';
}
int main () {
freopen ("sortaret.in", "r", stdin);
freopen ("sortaret.out", "w", stdout);
read_data ();
sortaret ();
return 0;
}