1 //hdu 1285
2
3 #include<stdio.h>
4 #include<string.h>
5 #include<stack>
6 using namespace std;
7 int map[600][600],n,count[600],seq[600],ff;
8 int topo()
9 {
10 int i,j;
11 ff=0;
12 while(ff<n)//当为排完
13 {
14 for(i=1;i<=n;i++)//从小开始找
15 {
16 if(count[i]==0)//入读为0
17 {
18 count[i]--;
19 seq[ff++]=i;
20 for(j=1;j<=n;j++)//相关的点减度
21 if(map[i][j])
22 {
23 count[j]--;
24 }
25
26 break;
27 }
28 }
29 }
30 return 1;
31 }
32 int main()
33 {
34 int i,j,m;
35 while(scanf("%d%d",&n,&m)!=EOF)
36 {
37 ff=0;
38 memset(count,0,sizeof(count));
39 memset(map,0,sizeof(map));
40 for(i=0;i<m;i++)
41 {
42 int x,y;
43 scanf("%d%d",&x,&y);
44 if(map[x][y]==0)//重边
45 {
46 map[x][y]=1;
47 count[y]++;//入读
48 }
49 }
50 int ans=topo();
51 if(ans)
52 {
53 for(i=0;i<ff;i++)
54 if(i==0)printf("%d",seq[i]);
55 else printf(" %d",seq[i]);
56 printf("\n");
57 }
58 }
59 }
60
61
62
63
64 /*模版
65 #include<stdio.h>
66 #include<string.h>
67 int map[103][103],n,m;
68 int c[103];
69 int dfs(int u)
70 {
71 int i,j,l;
72 c[u]=-1;
73 for(i=0;i<n;i++)
74 if(map[u][i])
75 {
76 if(c[i]<0)
77 return 0;
78 else if(!c[i]&&!dfs(i))
79 return 0;
80 }
81 c[u]=1;
82 return 1;
83 }
84 int topo()
85 {
86 int i,j;
87 memset(c,0,sizeof(c));
88 for(i=0;i<n;i++)
89 {
90 if(!c[i])
91 if(!dfs(i))
92 return 0;
93 }
94 return 1;
95 }
96 int main()
97 {
98 int i,j,l;
99 while(scanf("%d%d",&n,&m)!=EOF)
100 {
101 memset(map,0,sizeof(map));
102 if(!n)
103 break;
104 for(i=0;i<m;i++)
105 {
106 int a,b;
107 scanf("%d%d",&a,&b);
108 map[a][b]=1;
109 }
110 if(!topo())
111 printf("NO\n");
112 else printf("YES\n");
113 }
114 }*/