Pagini recente » Cod sursa (job #678182) | Cod sursa (job #452198) | Cod sursa (job #2564776) | Cod sursa (job #51231) | Cod sursa (job #866351)
Cod sursa(job #866351)
#include <cstdio>
#include <vector>
using namespace std;
#define S 50000
static vector<int> graph[S + 1];
static int Q[S + 1];
static int indegree[S + 1];
int main(int argc, char **argv) {
int N, M;
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
scanf("%d %d\n", &N, &M);
for (int i = 0; i < N; i++) indegree[i] = 0;
for (int i = 0; i < M; i++) {
int u, v;
scanf("%d %d\n", &u, &v);
graph[u].push_back(v);
indegree[v]++;
}
for (int i = 1; i <= N; i++) {
if (indegree[i] == 0) {
Q[++Q[0]] = i;
}
}
for (int i = 1; i <= N; i++) {
for (vector<int>::iterator it = graph[Q[i]].begin(); it != graph[Q[i]].end(); it++) {
indegree[*it]--;
if (indegree[*it] == 0) {
Q[++Q[0]] = *it;
}
}
}
for (int i = 1; i <= Q[0]; i++) {
printf("%d ", Q[i]);
}
return 0;
}