拓扑排序hdu1285

hdu1285 拓扑排序 因为补上周的codeforces,涉及到一些不熟悉的知识,先基础题练习一下。 题意:给出一些队伍的胜负关系,要求排序(胜者在前、无关则序号小者在前),保证有正常排序。 转化成图论,正常排序就是没有环,这里是一个拓扑排序,原理也很好理解,维护节点出度即可。用前向星存图,优先队列排序(注意这里要把大小关系倒过来一下,用友元重载或者用greater)。 一些解题报告指出了重边的问题,邻接矩阵会... 阅读详情

题意 有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。

思路:由题意可知这些输赢的关系不可能构成一个圈,比如1,2,3三队,1赢了2,2赢了3,3赢了1,这样的话,输出的排名顺序完全是不固定的。可以用拓扑排序来解决这种有向无环图排序的问题。拓扑排序的大致思路是:
1. 找出一个没有入度的点
2. 删除它和它的边,并记录该点
3. 重复以上过程
最后依次输出记录的这些点就完成了排序。

#include <iostream>
using namespace std;
#include <string.h>  
#include <stdio.h>    
#define  N 550  
#define  M 2100    
int map[N][N], in[M], ans[M];  
int main()  
{  
    int t,m,n,a,b,num;  
    while(scanf("%d %d",&n,&m)!=EOF)  
    {  
        memset(map,0,sizeof(map));  
        memset(in,0,sizeof(in));  
        while(m--)  
        {  
            scanf("%d %d",&a,&b);  
            if(map[a][b]==0)  
            {  
                map[a][b]=1;   
                in[b]++;     //记录入度 
            }  
        }  
        num=0;     
        while(num!=n)  
        {  
            for(int i=1; i <= n; i++)  
                if(in[i]==0)   //删除入度为0的点和它的边 
                {  
                    in[i]=-1;  
                    ans[num++]=i;  //记录该点 
                    t=i;         //存下该点,接下来删除和该点连接的边 
                    break;  
                }  
            for(int i=1; i <= n; i++)  
            {  
                if(map[t][i]==1)   
                {  
                    in[i]--;    //和删除的点相连接的边的入度减1 
                }  
            }  
        }  
        for(int i=0; i<n; i++)   //最后一个输出没有空格
            printf(i==n-1?"%d\n":"%d ",ans[i]);  
    }  
        return 0;  
}  
【ACM- OJ】《确定比赛名次》C++ 【ACM- OJ】《确定比赛名次》C++题目描述输入输出样例输入样例输出AC代码 题目描述 有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 输入 输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的 阅读详情

相关推荐

hdu1285 拓扑排序+邻接矩阵(邻接表)

给出胜负关系,要求确定名次

一段旅途 678

拓扑排序

1.什么是拓扑排序 百度解释:由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。 我们可以简单的理解为,做一件事情前是要有先决条件的,比如,你吃饭的前提是要先做饭。睡觉的前提是A完题(.疯狂暗示) 如图此时没有先决条件的仅有1,所以可以将其移除 得到如图结果此时2无先决条件再将2移除,依次操作。 所以按照以上步骤,我们可以看到拓扑排序,就是按照先决条件的排序。...

fighting_yifeng的博客 264

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 547

拓扑排序入门

                                               拓扑排序入门 下面先给一道题,然后先思考一下,下面再开始介绍拓扑排序, 有N个比赛队(1&lt;=N&lt;=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2...

qq_42757965的博客 599

C# 进阶:打造WinForms中的动态交互式UserControl

本文深入探讨了如何在C# WinForms中创建动态交互式UserControl,以提升桌面应用的用户体验和代码复用性。通过剖析UserControl生命周期、事件体系,并结合一个可拖拽缩放的分割面板实战案例,详细讲解了鼠标键盘事件处理、自定义绘制、状态管理以及性能优化等核心技巧,帮助开发者封装复杂交互逻辑,打造专业级自定义控件。

weixin_29279153的博客 462

YOLOv5改进 | 注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制,附二次创新)

本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制)。其主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)我将iRMB和C2f结合,然后也将其用在了检测头种进行尝试三种结果进行对比,针对的作用也不相同,但是无论那种实验均有一定涨点效果。

Snu77的博客 2571

确定比赛名次(拓扑排序)

题目大概: 输入有多个数据,输入n,m,接下来有n个队伍参加了m场比赛,接下来m行每行两个数p1,p2,是p1赢了p2,p1要排在p2前面,输出排名(不唯一)。 思路: 因为这个题中是无环有向图,所有可以用拓扑排序。 拓扑排序可以定义一个map来记录那两个队有比赛谁赢了,map【a】【b】=1;代表a赢了b。 还可以有入度记录r【】,记录入度个数。 出度个数c【】。 所有数据存入后,

a1046765624的博客 885

FreeRTOS深入教程(任务创建的深入和任务调度机制分析)

本篇文章将带大家深入学习任务的创建和分析任务调度的机制。本篇文章深入的讲解了任务创建的内部实现和任务调度的源代码分析和实现,学习这篇文章有助于更深入的学习FreeRTOS的源码。

m0_49476241的博客 6391

HDU 1285 说一道拓扑排序

自从北京赛结束,就很不想碰拓扑,也没有碰拓扑。总觉得是自己一道拓扑废了老长时间,以致我们小队输得很惨。周一的校赛提交题目又很窒息,整个人废了两天,却又突然想开了。 HDU1285 是一道很常规的拓扑排序,模板题。看了下,网上有朋友将各种做法总结在一起,我也照葫芦画瓢一次。 //HDU 1285 拓扑排序 //AC #include<iostream> #include&...

117瓶果粒橙 433

规控面试常见问题

规划控制算法常见问题。

每天进步一点点。 984

飞牛NAS 0day漏洞导致断网?完整的排查修复方案来了(含一键检测修复工具)

家里网络莫名断网,折腾十来天才发现是NAS被0day漏洞利用了?🔍 本文详细记录了从发现问题到最终解决的全过程,包括如何自查系统是否被入侵、使用检测脚本和专杀脚本进行修复,以及如何通过端口管理、访问控制、监控预警等措施加固系统安全 🔒,帮助遇到同样问题的用户快速排查和解决NAS安全风险 ✅

XiaoqiangClub的博客 5519

HDU 1285 拓扑排序+优先队列

传送门HDU1285 拓扑排序+优先队列 注意坑点:输入时需要判断重边,否则入度会出错 #include<bits/stdc++.h> using namespace std; priority_queue<int,vector<int >,greater<int > > q;//升序优先排列 //priority_queue<int, ve...

ACMjiayou的博客 335

SCI一区论文投稿终极技巧:Expert Systems With Applications;Knowledge-Based Systems

投稿计算机1区论文(如KBS、ESWA)的核心技巧包括:1)关键词选择需平衡范围与相关性,避免过细或过泛;2)研究内容聚焦单一核心创新点,避免内容分散;3)必须设计消融实验量化创新点的贡献;4)公开实验代码和数据集,确保可验证性;5)合理使用AI工具仅辅助写作,核心内容需自主完成;6)实验数据必须真实可靠。特别强调1区期刊对创新性和实验严谨性的高要求,需避免常见拒稿原因如内容分散、缺乏验证等。这些策略可提高投稿成功率,但前提是研究本身具有实质性创新。

ZhangJiqun&191cm&85kg 1156

拓扑排序复习--HDU1285

纯拓扑排序 注意priority_queue的用法 //拓扑排序复习 HDU1285 #include&lt;bits/stdc++.h&gt; using namespace std; const int N = 505; int g[N][N]; int in[N]; int n, m; void topsort() { priority_queue&lt;int, vector&lt;...

qq_40628208的博客 201

ARFoundation系列讲解-教程目录

一、教程目录 ARFoundation快速入门-01简介 ARFoundation快速入门-02环境搭建 ARFoundation快速入门-03环境配置之iOS ARFoundation快速入门-04环境配置之Android ARFoundation快速入门-05ARKit设备支持列表 ARFoundation快速入门-06ARCore设备支持列表 ARFoundation快速入门-07检查设备支持 ARFoundation快速入门-08平面检..........

a451319296的博客 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU1285 确定名次 拓扑排序

   Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input 输入有若干组,每组中的第一...

weixin_30807677的博客 88

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【HDU】1285 - 确定比赛名次(拓扑排序)

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 思路: 拓扑排序裸题,这里用优先队列的做法。拓扑排序就是每次将入度为 0 的数压入队列,优先队列可以使得压入队列的数按编号从小到大排序。 Code: #include <iostream> #include <queue> #include <cstring&...

360°顺滑 210

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

hdu1285 拓扑排序+优先队列

给出几组比赛的胜负情况。判断最后的排名。根据题意这就是一个明显的拓扑排序问题了。 注意 如果因为可能的排名有多种情况,这时要保证编号小的在前。 题目输入的数据可能有重复边 拓扑排序 首先统计每个结点的入度。将度为0的结点编号放入队列(此题放入优先队列中)中。 然后进行循环: 取出队头结点,视作边的起点。 然后“删除与该点相连的边”,代码就是将这个图中的该边另一个结点(即终点)的入度减一; 如果减一以后,终点的入度变为了0,那么将终点的编号入队列。 判断队列是否为空,若不空,则回到1

果冻虾仁 2272

HDU1285(拓扑排序(模板))

拓扑排序: 思想:1、在有向图中选择一个没有前驱的顶点并且输出 2、从图中删除该节点和所有以它为尾的弧。 重复上述步骤,知道全部顶点都已经输出,或者当前图中不存在无前驱的顶点为止。后面一种情况说明有向图中存在环。 HDU1285:http://acm.hdu.edu.cn/showproblem.php?pid=1285 package D0731; import java.ut

lhfight的专栏 835

HDU 1285 确定比赛名次 拓扑排序

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1285思路输入的数据一定有解:拓扑排序,优先取出编号小的点。#include<cstdio> #include<queue> #include<iostream> #include<functional> #include<vector> #include<map> #include<cstring> #i

chen_minghui的博客 237

HDU - 1285 确定比赛名次(拓扑排序)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285题解:拓扑排序AC代码:#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; int inDeep[550],n,m; int topo[550],t,G[500]

Infinity_Izayoi的博客 506

hdu 1285 确定比赛名次(拓扑排序)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1285 拓扑排序: 给出一些小于关系,可以看做有向边 #include #include using namespace std; const int maxn=505; int c[maxn]; int ans[maxn],t,G[maxn][maxn],n,m; void toposort(){

智浩的博客 178

hdu 1285 (简单的拓扑排序)

题意:给出一些队伍之间的胜负关系,让你输出排名的先后顺序,如果排名相同则字典序小的先输出。 思路:这是一道裸的拓扑排序的题目。主要用来测一下板子。 下面给出几种不同的版本 判断的第一种方法:我们可以知道当前入度为0的节点一定是根节点,这时我们只要将其输出,并且拆除所有与根节点相连的边就行了(拆的时候别忘了同时更新节点的入度值)。 用邻接矩阵存储的 #include &lt;cstr...

yiqzq的博客 691

拓扑排序 HDU - 1285 【Topological sort】

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 思路:Toposort,每次找度==0。题目要求编号小的在前并用小顶堆 #include <iostream> #include <string> #include <algorithm> #include <queue> #include &l...

Haipai1998的博客 212

HDU 1285 确定比赛名次(简单拓扑排序)

HDU 1285 确定比赛名次(简单拓扑排序) http://acm.hdu.edu.cn/showproblem.php?pid=1285 题意:给你N个点M条有向边,要求你输出字典序最小的拓扑排序序列. 分析:前面已经做过很多这种题了,没什么说的直接输出字典序最小的拓扑序列即可.        注意:非递归求字典序最小的拓扑序列需要用到优先队列,且要是小值优先的队列.大致的思想就是队列

code 1162

HDU - 1285 (直接拓扑排序)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1285 题意: 给定n个人的m组相对排序关系,求这n个人的拓扑排序(有多种排序情况时,取字典序最小的那种) 拓扑排序思路: 1. 先将顶点关系,转换为图里的关系,并通过顶点关系,初始化入度数组indegree(注意重边) 2. 找到入度为0的点,作为排序起点,若有多个,取序

怕什么真理无穷?进一寸有一寸的欢喜~ 736
上一篇: 扩展欧几里得算法poj1061
下一篇: Dijkstra算法51NOD1459
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值