poj 3687 Labeling Balls

来源:互联网 发布:普通话模拟考试软件 编辑:程序博客网 时间:2024/05/08 11:39

很简单的一道拓扑排序,也是第一次做。。。


附上代码:


#include<stdio.h>#include<string.h>int map[202][202];int vis[202];int cnt[202];int ans[202];int main(){    int t;    scanf("%d",&t);    while(t--)    {        memset(map,0,sizeof(map));        memset(vis,0,sizeof(vis));        memset(cnt,0,sizeof(cnt));        int n,m,k;        scanf("%d%d",&n,&m);        for(int i=0; i<m; i++)        {            int a,b;            scanf("%d%d",&a,&b);            if(!map[b][a])                cnt[a]++;            map[b][a]=1;        }        for(int i=n; i>0; i--)        {            k=-1;            for(int j=n; j>0; j--)                if(!vis[j]&&!cnt[j])                {                    k=j;                    break;                }            if(k==-1)            {                printf("-1\n");                break;            }            vis[k]=1;            ans[k]=i;            for(int j=n; j>0; j--)                if(map[k][j])                    cnt[j]--;        }        if(k==-1)            continue;        for(int i=1; i<=n; i++)        {            if(i!=1)                printf(" ");            printf("%d",ans[i]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击