您的位置:首页 > 其它

hdu 1285 确定比赛名次

2011-09-08 19:38 288 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1285

看到的一个比较好的模板

#include <iostream>
using namespace std;
#define MAX 505
int map[MAX][MAX];
int p[MAX];

int toposort(int n,int mat[][MAX],int* ret)
{ //浙大模板,未改一点
int d[MAX],i,j,k;
for (i=0;i<n;i++)
for (d[i]=j=0;j<n;d[i]+=mat[j++][i]);
for (k=0;k<n;ret[k++]=i)
{
for (i=0;d[i]&&i<n;i++);
if (i==n)
return 0;
for (d[i]=-1,j=0;j<n;j++)
d[j]-=mat[i][j];
}
return 1;
}

int main()
{
int n,m,a,b;
int i;
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
for(i=0;i<m;i++)
{
cin>>a>>b;
map[a-1][b-1]=1;
}

toposort(n,map,p);

for(i=0;i<n;i++)
printf(i==0?"%d":" %d",p[i]+1);

printf("\n");
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: