http://acm.hdu.edu.cn/showproblem.php?pid=1285
toposort模板,数组开太大了,TLE,赋值时,当作无向图,WA了
// File Name: hdu1285.cpp
// Author: bo_jwolf
// Created Time: Tuesday, May 07, 2013 PM06:54:09 HKT
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<queue>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
const int maxn = 505 ;
int mapp[ maxn ][ maxn ] ;
int p[ maxn ] ;
int toposort( int n , int mat[][ maxn ] , int *ret )
{
// int i , j ;
int d[ maxn ] , i , j , k ;
for( i = 0 ; i < n ; i++ )
for( d[ i ] = j = 0 ; j < n ; d[ i ] += mat[ j++ ][ i ] ) ;
for( k = 0 ; k < n ; ret[ k++ ] = i )
{
for( i = 0 ; d[ i ] && i < n ; i++ )
if( i == n )
return 0;
for( d[ i ] = -1 , j = 0 ; j < n ; j++ )
d[ j ] -= mat[ i ][ j ] ;
}
return 1 ;
}
int main()
{
int m , n ;
int a , b ;
while( cin >> m >> n && n && m )
{
memset( mapp , 0 , sizeof( mapp ) ) ;
for( int i = 0 ; i < n ; i++ )
{
cin >> a >> b;
mapp[ a - 1 ][ b - 1 ] = 1 ;
}
toposort( m , mapp , p ) ;
for( int i = 0 ; i < m ; i++ )
{
cout << p[ i ] + 1 << ( i == m - 1 ? '\n' : ' ' ) ;
}
}
return 0;
}