您的位置:首页 > 运维架构

hdu 1285 确定比赛名次 topo

2013-05-29 21:22 155 查看
#include <iostream>

#include <stdlib.h>

#include <memory.h>

#include <queue>

using namespace std;

int map[510][510];

int ans[510];

int in[510];

int n,m,a,b;

int q[510],size,top;

void find(){

for(int i=1;i<=n;i++){

if(in[i]==0){

q[size++] = i;

//printf("%d\n",i);

break;

}

}

}

void findans(){

int t = n,tp;

int k=0;



while(t--){

find();

tp = q[top++];

in[tp] = -1;

ans[k++]=tp;

for(int i=1;i<=n;i++){

if(map[tp][i]){

map[tp][i]--;

in[i]--;

}

}

//find();

}

}

int main(){

while(scanf("%d%d",&n,&m)!=EOF){

memset(map,0,sizeof(map));

memset(in,0,sizeof(in));

size = top =0;

for(int i=0;i<m;i++){

scanf("%d%d",&a,&b);

if(map[a][b]==0){

map[a][b]=1;

in[b]++;

}

}

findans();

printf("%d",ans[0]);

for(int i=1;i<n;i++){

printf(" %d",ans[i]);

}

printf("\n");

}

return 0;

}

这题就是考察的拓扑排序。但是要注意重边。我就是在着WA了几次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: