Pagini recente » Istoria paginii runda/5problemepanamaine | Cod sursa (job #1923072) | Cod sursa (job #1390250) | Cod sursa (job #175510) | Cod sursa (job #886930)
Cod sursa(job #886930)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
#include <stack>
using namespace std;
#define FORIT(it,v) for(typeof((v).begin())it=(v).begin();it!=(v).end();++it)
const int MAX_N = 50100;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int N, M;
vector<int> rules[MAX_N];
int req[MAX_N];
int main() {
fin >> N >> M;
for (int i = 1; i <= M; ++i) {
int p, q;
fin >> p >> q;
rules[p].push_back(q);
++req[q];
}
queue<int> free_nodes;
for (int i = 1; i <= N; ++i) {
if (req[i] == 0) free_nodes.push(i);
}
stack<int> output;
while (!free_nodes.empty()) {
int node = free_nodes.front();
free_nodes.pop();
output.push(node);
FORIT (it, rules[node]) {
if (--req[*it] == 0) {
free_nodes.push(*it);
}
}
}
while (!output.empty()) {
fout << output.top() << ' ';
output.pop();
}
return 0;
}