Pagini recente » Cod sursa (job #71730) | Borderou de evaluare (job #1567281) | Cod sursa (job #2297003) | Cod sursa (job #1324698) | Cod sursa (job #2354842)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("sortaret.in");
ofstream out("sortaret.out");
const int N_MAX = 50000;
const int M_MAX = 100000;
int N, M;
vector<int> Edges[N_MAX + 1];
int Q[N_MAX + 1], rightt;
int deg[N_MAX + 1];
void sortaret() {
//bagam la inceput nodurile care au gradul exterior 0
for(int i = 1; i <= N; ++i)
if(deg[i] == 0)
Q[++rightt] = i;
for(int i = 1; i <= N; ++i) {
int x = Q[i];
//scoatem arcele care pleaca din x si adaugam eventual nodurile cu gradul exterior 0
for(auto y : Edges[x]) {
--deg[y];
if(deg[y] == 0)
Q[++rightt] = y;
}
}
}
int main()
{
int x, y;
in >> N >> M;
for(int i = 1; i <= M; ++i) {
in >> x >> y;
Edges[x].push_back(y);
++deg[y];
}
sortaret();
for(int i = 1; i <= N; ++i)
out << Q[i] << ' ';
return 0;
}