评了好几次,有迷之错误!
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int n,map[1009][1009],ans,m,cnt[1009];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int x,y;
memset(map,0,sizeof(map));
memset(cnt,0,sizeof(cnt));
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if (map[y][x]==0) cnt[y]++;//避免重边
map[y][x]=1;
}
for (int i=1;i<=n;i++)
{
int j;
for (j=1;j<=n;j++) if (cnt[j]==0) break;
cnt[j]--;
if (i<n) printf("%d ",j);else printf("%d",j);
for (int l=1;l<=n;l++) if (map[l][j]==1) cnt[l]--;
}///拓扑排序,非常简洁
printf("\n");
}
return 0;
}