Follows 10305.c (Total 53 lines):

/* @JUDGE_ID:4461XX 10305 C "Topological" */
/* A */

#include<stdio.h>
#include<string.h>
#include<limits.h>
#define MAX 100

void toDo( int n , int m )
{
	int map[MAX][MAX] , connectToMe[MAX] ;
	int a , b , tmpn , i , mini , first=1 ;
	
	memset( map , 0 , sizeof( map ) ) ;
	memset( connectToMe , 0 , sizeof( connectToMe ) ) ;

	for( ; m ; --m ){
		scanf( "%d %d" , &a , &b ) ;
		map[a-1][b-1] = 1 ;
		++connectToMe[b-1] ;
	}

	for( tmpn=n ; tmpn ; --tmpn ){
		for( i=1,mini=0 ; i<n ; ++i )
			if( !connectToMe[i] ){
				mini = i ;
				connectToMe[i] = INT_MAX ;
				break ;
			}

		for( i=0 ; i<n ; ++i )
			if( map[mini][i] ) --connectToMe[i] ;

		if( first ){
			printf( "%d" , mini+1 ) ;
			first = 0 ;
		}
		else printf( " %d" , mini+1 ) ;
	}
}
int main( void )
{
	int m , n ;

	while( scanf( "%d %d" , &n , &m ) ){
		if( !n&&!m ) break ;

		toDo( n , m ) ;
		putchar( '\n' ) ;
	}

	return 0 ;
}

Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com