Pagini recente » Cod sursa (job #1052419) | Cod sursa (job #1395546) | Cod sursa (job #1861532) | Cod sursa (job #1343730) | Cod sursa (job #978585)
Cod sursa(job #978585)
#include<stdio.h>
#include<stdlib.h>
#define N 50005
struct node {
int n;
struct node *next;
};
int main() {
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
int n, m, i;
scanf("%d %d", &n, &m);
struct node **adj_list = malloc((n + 1) * sizeof(struct node*));
for (i = 0; i <= n; i++) {
adj_list[i] = malloc(sizeof(struct node));
adj_list[i]->n = 0;
adj_list[i]->next = NULL;
}
for(i = 0; i < m; i++) {
int x, y;
scanf("%d %d", &x, &y);
struct node *nod = malloc(sizeof(struct node));
nod->n = y;
adj_list[y]->n++;
nod->next = adj_list[x]->next;
adj_list[x]->next = nod;
}
int q[N], h, t;
h = t = 0;
for (i = 1; i <= n; i++) {
if (adj_list[i]->n == 0) {
q[t++] = i;
}
}
int nod;
while (h < t) {
nod = q[h++];
printf("%d ", nod);
struct node* lst = adj_list[nod]->next;
while(lst != NULL) {
adj_list[lst->n]->n--;
if (adj_list[lst->n]->n == 0)
q[t++] = lst->n;
lst = lst->next;
}
}
return 0;
}