1 #include<stdio.h>
2 #include<string.h>
3 int map[505][505],into[505],w[505];
4 int main()
5 {
6 int n,m,u,v,i,j,k;
7 while (~scanf("%d%d",&n,&m))
8 {
9 memset(map,0,sizeof(map));
10 memset(into,0,sizeof(into));
11 for (i=1;i<=m;i++)
12 {
13 scanf("%d%d",&u,&v);
14 map[u][v]=1;
15 }
16 for (i=1;i<=n;i++)
17 for (j=1;j<=n;j++)
18 if (map[i][j]==1) into[j]++;
19 for (i=1;i<=n;i++)
20 {
21 for (j=1;j<=n;j++)
22 if (into[j]==0){
23 w[i]=j;
24 break;
25 }
26 into[j]=-1;
27 for (k=1;k<=n;k++)
28 if (map[j][k]==1) into[k]--;
29 }
30 for (i=1;i<n;i++) printf("%d ",w[i]);
31 printf("%d\n",w[n]);
32 }
33 return 0;
34 }
http://acm.hdu.edu.cn/showproblem.php?pid=1285