猫猫向前冲(拓扑排序)

2023-05-16

问题描述:

有一天,TT 在 B 站上观看猫猫的比赛。一共有 N 只猫猫,编号依次为1,2,3,…,N进行比赛。比赛结束后,Up 主会为所有的猫猫从前到后依次排名并发放爱吃的小鱼干,TT 的魔法猫将每场比赛的结果都记录了下来,现在他想编程序确定字典序最小的名次序列,请你帮帮他。

input:
输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示猫猫的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即编号为 P1 的猫猫赢了编号为 P2 的猫猫。
output:
给出一个符合要求的排名。输出时猫猫的编号之间有空格,最后一名后面没有空格!
其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。

样例输入:

4 3
1 2
2 3
4 3

样例输出:

1 2 4 3

解题思路:

在这个问题中,猫猫们的比赛胜负关系可以等价为一个有向图,a赢了b表示有一条边从a指向b,并且最终的名次a在b的前面。如果两个猫的名次相同,则字典序小的那个排在前面。那么该问题就可以转化为求字典序最小的拓扑序列。为了保证字典序最小,我们可以将放入队列中的点放入一个优先级队列中,由于priority_queue默认是最大堆,则我们可以将节点的负值放进去,从而相当于最小堆。

在实现时,首先将图中所有的边加入,在加入的同时,利用一个数组来记录每一个点的出度。在构造完成之后,入过某些点的出度为0,那么它的名次就靠前,就可以放入到优先级队列中,如果队列不空,从队列中取出最小值的负值,将其所有的邻接边删除,并判断是否有点的入度为0,如果有的话,加入优先级队列中,重复此过程。最终得到一个字典序最小的排名。

代码:

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int N,M;
int a[510];
vector<int> b[510];
int main()
{
	while(cin>>N>>M)
	{
		for(int i=1;i<=N;i++)
		{//初始化
			a[i]=0;
			b[i].clear();
		}
		priority_queue<int> p;
		vector<int> end;
		for(int i=0;i<M;i++)
		{
			int x,y;
			cin>>x>>y;
			a[y]++;//记录y的入度
			b[x].push_back(y);
		}
		for(int i=1;i<=N;i++)
	 	{
	 		if(a[i]==0)
				p.push(-i);	//将入读为0的点的负数加入优先级队列
		}
		while(!p.empty())
		{//队列不为空
			int te=-p.top();//取出队首
			p.pop();
			end.push_back(te);
			for(int i=0;i<b[te].size();i++)
			{
			//遍历其所有的邻接边,将邻接点的入度减1,判断是否为0,为0则入队
				int tt=b[te][i];
				a[tt]--;
				if(a[tt]==0)
					p.push(-tt);
			}
		}
		for(int i=0;i<end.size();i++)
		{
			cout<<end[i];//输出排名
			if(i!=end.size()-1)
				cout<<" ";
		}
		cout<<endl;
	}
	
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

猫猫向前冲(拓扑排序) 的相关文章

  • 第十章:面向对象分析(此章完结)

    10 4 4建立活动图 活动具体表现为由一系列动作组成的执行过程 xff0c 将各种活动及不同活动之间的转换 xff0c 用图形进行表示就构成了活动图 xff0c 作用是对系统的行为建模 1 活动图与流程图 活动图描述系统使用的活动 xff
  • 第十五章 软件工程新技术

    俺家老大说这一章我不需要仔细看 xff0c 快快过一遍就行 xff08 可能是觉得以我的能力一时半会也用不到吧 xff08 捂脸 xff09 xff09 那么我就抄一段本章小结吧 xff0c 后面如有需要我在重新认真学习 xff08 奸笑
  • 第四章 软件测试方法(2)

    上周学习了白盒 xff0c 本周开始学习黑盒测试 4 3黑盒测试 黑盒测试 xff08 Black Box Testing xff09 也称功能测试 xff0c 主要测试每个功能是否正常使用 是软件测试使用中最广泛的一类测试 在黑盒测试中
  • vnc viewer手机中文版,超好用的5款vnc viewer手机中文版

    在平时工作中 xff0c 经常会用到vnc viewer软件 当软件打开都是英文介绍 xff0c 真的让人很头痛 在各种各样的vnc viewer手机中文版软件中 xff0c 要想找到那款让你使用方便的软件 xff0c 真的很不容易 xff
  • 第九章 APP项目测试(4) 测试工具

    接上面一篇 继续 xff08 7 xff09 kill process after error 参数说明 xff1a 用于指定当应用程序发生错误时 xff0c 是否停止运行 如果指定此参数 xff0c 当应用程序发生错误时 xff0c 应用
  • 第九章 APP项目测试(此章完结)

    9 4 5 Fiddler 是一个HTTP的调试代理工具 xff0c 它以代码服务器的方式 xff0c 监听系统的HTTP网络数据 xff0c 俗称抓包工具 可直接去官网下载安装 1 Fiddler工具介绍 启动Fiddler后 xff0c
  • 软硬件基础知识学习--小日记(1)

    终于看完了软件工程和软件测试技术指南两本书 xff0c 因为是自学总觉得前学后忘 有时候找老公不耻下问 xff0c 他总是很完美的把我问的哑口无言 昨天意外翻到黑马程序的的视频 xff0c 觉得非常适合我这0基础的小白 然后就有了今天的小日
  • Qt for Windows版本下编译QtDBus模块

    转载时请注明出处和作者联系方式 作者联系方 式 xff1a Lutx lt 80437 at zj dot com gt Qt中已经包含了QtDBus模块 但此模块只能在Unix系统下使用 却不支持Windows系统 这里介绍的是Windo
  • 智安网络丨一行代码,揭开CPU执行原理!

    计算机如何执行你写的代码 xff1f 知乎上有人提问 xff1a 电脑怎样执行编程语言的 xff1f 图片 很多刚刚入坑的小白可能对此完全没有概念 xff0c 或者模模糊糊知道个大概 xff0c 我们写下的一行行代码 xff0c 计算机到底
  • 推荐7个冷门手机APP,每一个都让我相见恨晚

    推荐7个让我相见恨晚的手机APP 1 Smart Kit 360 Smart Kit 360是一个全能的工具箱软件 xff0c 只有10M的大小 xff0c 却提供了40多个实用工具 xff0c 有了它 xff0c 就不需要下载这么多软件了
  • 推荐8款有趣实用的软件,建议你先收藏,总有一天你会用到

    推荐8个非常好用的软件 xff0c 每一个都能给人带来惊喜 xff0c 软件的实用性非常强 xff0c 千万不要错过了 1 央视频 央视频是中央广播电视总台出品的高质量视频社交软件 xff0c 内容丰富 xff0c 功能强大 强大的电视直播
  • 中国天气网 API

    中国天气网 API 真正的中国天气api接口xml xff0c json 详解 前言 某天想写个天气软件 xff0c 于是上网找找有没有免费的天气 API 发现许多的API不是收费 xff0c 就是不能用了 xff08 心塞塞 xff09
  • 【Linux-Ubuntu】apt-get update软件更新的时候经常出错

    1 网络问题 将电脑连接的WIFI改成手机热点连接 2 镜像源问题 使用最新的镜像源进行下载更新 xff1a 可以参考下面方式获取 xff1a 然后选择手动替换 xff0c 或者命令替换 xff0c 一般你直接复制原来的 list文件 xf
  • Flink与Kafka的爱恨情仇

    FlinkKafkaConsumer 源码剖析 FlinkKafkaConsumer 的继承关系如下图所示 可以发现几个版本的 FlinkKafkaConsumer 都继承自 FlinkKafkaConsumerBase 抽象类 xff0c
  • realvnc,简单介绍realvnc

    什么是vnc vnc xff08 Virtual Network Computing xff0c 虚拟网络计算 xff09 最早是一套由英国剑桥大学ATT实验室在2002年开发的轻量型的远程控制计算机软件 xff0c 其采用了 GPL 授权
  • 843. Guess the Word

    Hard 435458Add to ListShare This problem is an interactive problem new to the LeetCode platform We are given a word list
  • 127. Word Ladder

    Given two words beginWord and endWord and a dictionary 39 s word list find the length of shortest transformation sequenc
  • visual studio里配置boost

    visual studio使用boost的方法 xff0c 优选第一个 xff1a 1 使用nuget安装boost xff0c 根据不同的visual studio版本 xff0c 选择不同版本的boost vc 安装 xff0c 比如对
  • PHP json_decode中文转义的问题

    默认情况下PHP的 json decode 方法会把特殊字符进行转义 xff0c 还会把中文转为Unicode编码形式 在有些情况下不希望进行这种转义 对于PHP5 4 43 版本 xff0c json decode函数第二个参数 xff0
  • 访问win7的d$这种默认共享时拒绝访问

    访问win7的d 这种默认共享时拒绝访问 xff0c 即使输入正确的用户名密码 xff0c 也无法访问 导致这个问题的原因有多种 xff0c 本人当时是由于UAC的缘故 xff0c 所以这里只讲这一种 UAC即用户账户控制 xff0c 在w

随机推荐

  • OleDbConnection打开xls文件发生“External table is not in the expected format.”异常

    网上大量能搜索到的是 xff1a 打开xls用 34 Provider 61 Microsoft Jet OLEDB 4 0 Data Source 61 34 43 excelFilePath 43 34 Extended Propert
  • c#里,WebBrowser实现不加载图片等控制

    这个点子来自Jiang Sheng蒋大拿 xff1a http stackoverflow com questions 2048424 disable image loading from webbrowser control before
  • drop database 使用通配符批量删除数据库

    方案1 xff1a declare 64 sql varchar 8000 Select 64 sql 61 isnull 64 sql 39 39 43 39 drop database 39 43 name 43 char 13 fro
  • C/C++编程:可变参数

    常见实现方法 变常参数的宏定义以及 VA ARGS 变长参数的宏定义是指在宏定义中参数列表的最后一个参数为省略号 xff0c 而预定义宏 VA ARGS则可以在宏定义的实现部分替换省略号所代表的字符串 xff0c 比如 xff1a span
  • python:序列切片

    Python 里 xff0c 像列表 xff08 list xff09 元组 xff08 tuple xff09 和字符串 xff08 str xff09 这类序列类型都支持切片操作 切片和区间会忽略最后一个元素 使用方括号 的形式截取字符
  • 【2020-8-8】树莓派+Ubuntu18.04编译Dji Guidance ROS(转载)

    实验室还有一批大疆的M100和配套的Guidance xff0c 但是一直没有玩起来 xff0c 大疆官方也早就抛弃了这个平台 xff0c 不再提供技术支持 今天在树莓派上编译Intel Realsense的固件的时候 xff0c 看到大疆
  • Unix/Linux编程:System V信号量

    System V信号量不是用来在进程间传输数据的 xff0c 而是用来同步进程的动作 信号量的一个常见用途是同步对一块共享内存的访问以防止出现一个进程在访问共享内存的同时另一个进程更新这块内存的情况 一个信号量是一个由内核维护的整数 xff
  • cmake:命令行工具cmake

    概要 Generate a Project Buildsystem cmake span class token punctuation span span class token operator lt span options span
  • ffmpeg:ffmpeg拉流rtsp报错method SETUP failed: 454 Session Not Found

    报错 试用ffmpeg请求rtsp流时 xff0c UDP端口时无法返回 span class token punctuation span rtsp 64 span class token number 0x5650696e2580 sp
  • python:类实例化

    什么是类实例化 类对象就像是一个用来创建对象的工厂 创建一个新对象的过程叫做实例化 instantiation 这个新对象叫做这个类的一个实例 instance 举个例子 定义好了Student类 xff0c 就可以根据Student类创建
  • Ubuntu: AppImage格式安装、卸载

    我们在linux ubuntu 上最常见到的一种软件包就是deb xff0c 我们可以使用linux的包管理器来进行安装 卸载 xff0c 这个过程提供了很好的GUI界面 xff0c 所以很轻松 但是 xff0c 有时候我们会遇到AppIm
  • VSCode:使用CMakeLists.txt构建C++项目

    vscode配置 插件 xff1a CMake插件主要功能是CMake语法高亮 自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具 xff0c 比如生成CMake项目 构建CMake项目等CMake T
  • SQL:如何插入JSON数据与返回JSON数据

    什么是JSON JSON xff08 JavaScript Object Notation xff09 是一种轻量级的数据交换语言 xff0c 并且是独立于语言的文本格式 一些NoSQL数据库选择JSON作为其数据存储格式 xff0c 比如
  • python3用Selenium驱动火狐浏览器GeckoDriver安装教程

    前面讲到了谷歌浏览器ChromeDriver的安装 xff0c 今天我们来讲讲火狐浏览器GeckoDviver的安装 xff0c 那么对于 Firefox 来说 xff0c 也可以使用同样的方式完成 Sclenium的对接 xff0c 这时
  • Android Sqlite 读取数据99999.99变为100000.00,出现科学计数法

    问题描述 xff1a 将99999 99 存入Sqlite数据库 xff0c 类型为DECIMAL 6 3 通过cursor getString 变为100000 00 且存储亿位数据时 xff1a cursor getString 会出现
  • iOS OC的基本视图创建-UIView

    1 一般UIView 创建 UIView cellView 61 UIView alloc init superView addSubview cellView cellView layer cornerRadius 61 25 ViewW
  • realvnc免费版,细数4款超好用的realvnc免费版

    RealVNC是VNC xff08 Virtual Network Computing xff09 众多操作平台版本中的一员 xff0c 是互联网上比较流行的远程控制软件 它包括vnc4server和vnc4viewer两个部分 xff0c
  • linux系统实现路由功能

    概述 xff1a 1 在完成4台设备ip配置后默认路由有 路由器Rocky02上默认有 xff1a 192 168 10 0 172 20 0 0 路由器Rocky03上默认有 xff1a 192 168 10 0 10 0 0 0 主机R
  • TT 的旅行日记(Dijkstra)

    问题描述 xff1a 众所周知 xff0c TT 有一只魔法猫 今天他在 B 站上开启了一次旅行直播 xff0c 记录他与魔法猫在喵星旅游时的奇遇 TT 从家里出发 xff0c 准备乘坐猫猫快线前往喵星机场 猫猫快线分为经济线和商业线两种
  • 猫猫向前冲(拓扑排序)

    问题描述 xff1a 有一天 xff0c TT 在 B 站上观看猫猫的比赛 一共有 N 只猫猫 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xff0c N进行比赛 比赛结束后 xff0c Up 主会为所有的猫猫从前