Pagini recente » Cod sursa (job #2698440) | Cod sursa (job #2759282) | Cod sursa (job #3127673) | Cod sursa (job #600787) | Cod sursa (job #2243770)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50000
#define MMAX 100000
int n, m, p, nr, vf[1 + 2 * MMAX], urm[1 + 2 * MMAX], lst[1 + NMAX], viz[1 + NMAX], s, x, succesori[1 + NMAX];
int st, dr;
int stiva[1 + NMAX];
int sol[1 + NMAX];
void adauga ( int x, int y ) {
++nr;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void dfs ( int node ) {
viz[node] = 1;
int p = lst[node];
while ( p != 0 ) {
int y = vf[p];
if ( !viz[y] )
dfs ( y );
p = urm[p];
}
sol[++x] = node;
}
int main() {
FILE *fin = fopen ( "sortaret.in", "r" );
fscanf ( fin, "%d%d", &n, &m );
int i;
for ( i = 1; i <= m; ++i ) {
int x, y;
fscanf ( fin, "%d%d", &x, &y );
adauga ( x, y );
++succesori[y];
}
fclose ( fin );
st = 1;
for ( i = 1; i <= n; ++i )
if ( succesori[i] == 0 )
dfs(i);
FILE *fout = fopen ( "sortaret.out", "w" );
for ( i = n; i >= 1; --i )
fprintf ( fout, "%d ", sol[i] );
fclose ( fout );
return 0;
}