• HDU1285——确定比赛名次


    Problem Description
    有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。
     
    Input
    输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。
     
    Output
    给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。

    其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。
     
    Sample Input
    4 3 1 2 2 3 4 3
     
    Sample Output
    1 2 4 3
     
    Author
    SmallBeer(CML)
     

    分析:

    拓扑排序、就这么搞~

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 510
    using namespace std;
    int map[maxn][maxn];//路径
    int in_degree[maxn];//入度
    int ans[maxn];
    int n,m,x,y;
    void topo()
    {
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(map[i][j])
                    in_degree[j]++;//记录各个入度
        for(int i=1; i<=n; i++)
        {
            int k=1;
            while(in_degree[k]!=0)
                k++;
            ans[i]=k;
            in_degree[k]=-1;
            /*更新为-1,后边检测时不受影响、
            相当于删除节点*/
            for(int j=1; j<=n; j++)
                if(map[k][j])
                    in_degree[j]--;//相关联的入度减1
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(in_degree,0,sizeof(in_degree));
            memset(ans,0,sizeof(ans));
            memset(map,0,sizeof(map));
            for(int i=0; i<m; i++)
            {
                scanf("%d%d",&x,&y);
                map[x][y]=1;
            }
            topo();
            for(int i=1; i<n; i++)
                printf("%d ",ans[i]);
            printf("%d
    ",ans[n]);
        }
        return 0;
    }


  • 相关阅读:
    背包问题--动态规划
    day03_13 多分支if语句及作业
    day03_12 缩进介绍
    day03_11 if语句实现猜年龄01
    day03_10 注释及简单的用户输入输出
    day03_09 编码部分历史及文件编码简介
    day03_07 变量的重新赋值01
    day03_06 变量详解
    day03_05 Python程序文件执行和与其他编程语言对比
    day03_04 文件后缀及系统环境变量
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3303888.html
Copyright © 2020-2023  润新知