您的位置:首页 > 其它

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

2012-08-28 16:00 295 查看
#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
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: