Pagini recente » Monitorul de evaluare | Cod sursa (job #2265226) | Cod sursa (job #2725260) | Cod sursa (job #2416311) | Cod sursa (job #1398820)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
int main(int argc, char *argv[]) {
ifstream f{"sortaret.in"};
ofstream g{"sortaret.out"};
int n, m;
f >> n;
f >> m;
vector<int> edge[n];
vector<int> degree(n, 0);
for (int i = 0; i < m; ++i) {
int s, d;
f >> s >> d;
s--, d--;
edge[s].push_back(d);
degree[d]++;
}
deque<int> sources;
for (int i = 0; i < n; ++i) {
if (degree[i] == 0)
sources.push_back(i);
}
while (!sources.empty()) {
int source = sources.back(); sources.pop_back();
g << source + 1<< " ";
for (auto d : edge[source]) {
degree[d]--;
if (degree[d] == 0) {
sources.push_back(d);
}
}
}
return 0;
}