hdu 1285 确定比赛名次(很典型的拓扑排序)

简介:

题目连接 : http://acm.hdu.edu.cn/showproblem.php?pid=1285

拓扑排序,很明显的一道拓扑排序的问题,用一个二维数组存储两个数字之间的关系,如果某个数大于另一个数,那么它们之间的关系为1,否则为0.

如果存在关系为1的两个数据,那么行表示比列大。列的下标入度自增1.然后使用拓扑排序思想依次取出每个节点。

此题可参考类似题目 http://www.cnblogs.com/newpanderking/archive/2012/10/16/2726757.html 这也是一道经典的拓扑排序

复制代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 510
using namespace std;
/*
拓扑排序解法
*/

int rela[maxn][maxn];
int in_degree[maxn],ans[maxn];
int n,m,x,y;

void top_order()
{
    //预处理
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    if(rela[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,后边检测时不受影响
        for(int j=1;j<=n;j++)
        if(rela[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(rela,0,sizeof(rela));
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&x,&y);
            rela[x][y]=1;
        }
        top_order();
        for(int i=1;i<n;i++)
        printf("%d ",ans[i]);
        printf("%d\n",ans[n]);
    }
    return 0;
}
复制代码
'






本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/archive/2012/11/08/2759608.html  ,如需转载请自行联系原作者



相关文章
|
3月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
36 2
|
27天前
|
算法 测试技术 C#
【广度优先搜索】【分类讨论】900. 最佳运动员的比拼回合
【广度优先搜索】【分类讨论】900. 最佳运动员的比拼回合
|
8天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
9月前
|
算法
[算法刷题题解笔记] 洛谷 P1011 [NOIP1998 提高组] 车站 [数学|斐波那契|推导]
[算法刷题题解笔记] 洛谷 P1011 [NOIP1998 提高组] 车站 [数学|斐波那契|推导]
|
算法
每日一题冲刺大厂第十七天 逆序对
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
228 0
|
Java C语言 C++
【蓝桥杯基础题】2020年省赛填空题—既约分数
【蓝桥杯基础题】2020年省赛填空题—既约分数
101 0
【蓝桥杯基础题】2020年省赛填空题—既约分数
PTA 1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军
64 0
|
算法 Go 索引
算法练习第三天——杨辉三角
给定一个非负整数 num, 生成「杨辉三角」的前 num 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
算法练习第三天——杨辉三角
|
测试技术
HDU-4508,湫湫系列故事——减肥记I(完全背包)
HDU-4508,湫湫系列故事——减肥记I(完全背包)
HDU - 1285: 确定比赛名次
HDU - 1285: 确定比赛名次
70 0