#include <stdio.h>
#include <cstring>
const int maxn=501;
int map[maxn][maxn];
int in[maxn];
int ans[maxn];
int main()
{
int n,m,u,v;
while(scanf("%d%d",&n,&m)==2)
{
memset(in,0,sizeof(in));
memset(map,0,sizeof(map));
memset(ans,0,sizeof(ans));
for(int i=1; i<=m; i++)
{
scanf("%d%d",&u,&v);
map[u][v]=1;
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
in[j]+=map[i][j];
int i,j,k;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
if(in[j]==0) break;
in[j]=-1;
ans[i]=j;
for(k=1; k<=n; k++)
in[k]-=map[j][k];//将所有和j相连的点的入度-1
}
for(int i=1; i<n; i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]);
}
return 0;
}
确定比赛名次 hdu 拓扑输出字典序最小解
最新推荐文章于 2021-06-13 01:17:47 发布