确定比赛名次 hdu 拓扑输出字典序最小解

来源:互联网 发布:淘宝男鞋价格和图片 编辑:程序博客网 时间:2024/05/16 19:43
#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;}