B-猫猫向前冲(拓扑排序

2023-05-16

题意:

在这里插入图片描述

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的路线。通过一个数组rd[] 记录下每个点的入度,在构建图的时候记录下,每个点的入度。在图构建完成的时候,可以遍历找出入度为0的点,因为需要字典序最小的排序,故将这些点放入优先队列。每次从队首取出一个点的时候,将其放到队列中。并以这个点开始,遍历其所能到达的所有点,并将其能到达的所有的点的rd[]值减去1,减去的同时,判断若入度已经为0,则将这些点也加入到优先队列中去。最后等优先队列为空的时候,则图,遍历完成。输出队列中的点即可。

代码:

#include <cstdio>
#include <algorithm> 
#include <iostream>
#include <string.h> 
#include <queue>
#include <cmath>
using namespace std;

queue<int> q1;
priority_queue<int> q2;

int N, M, p1, p2;
struct Edge {
	int to, next;
}e[1000];
int tot;
int head[505];
int rd[505];

// to到那个点   从那个点 
void add_edge(int t, int f) {
	rd[t]++;     //入度增加 
	e[tot].to = t;
	e[tot].next = head[f];
	head[f] = tot;
	tot++;
}

void bfs() {
	while (q2.size()) {
		int x = -q2.top(); q2.pop();
		q1.push(x);
		int y = head[x];
		while (y != -1) {  //y->to
			int r1 = e[y].to;
			rd[r1]--;
			if (rd[r1] == 0) q2.push(-r1);
			y = e[y].next;
		}
	}
}


int main() {
	ios::sync_with_stdio(0);
	while (cin >> N >> M) {
		tot = 0;
		for (int i = 1; i <= N; i++) {
			head[i] = -1;
			rd[i] = 0;
		}
		for (int i = 0; i < M; i++) {
			cin >> p1 >> p2;
			add_edge(p2, p1);
		}
		for (int i = 1; i <= N; i++) {
			if (rd[i] == 0) q2.push(-i);
		}
		bfs();
		int x = q1.front(); q1.pop();
		cout << x;
		while (q1.size()) {
			x = q1.front(); q1.pop();
			cout << " " << x;
		}
		cout << endl;
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • java.util.regex.PatternSyntaxException

    在处理字符串用到String replaceAll 这个方法的时候出现了这个异常 Exception in thread 34 main 34 java util regex PatternSyntaxException Dangling
  • Shell 脚本 Debug 方法

    可能有的程序员在对程序调试的时候用printf或者echo将信息挨条打印出来 xff0c 但是这比较麻烦 xff0c 因为在交付的时候还要将这些语句一条条删除 xff0c 下面对shell debug的方法稍微做一个总结 xff1a 1 使
  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action
  • 获取JPasswordField组件中的密码

    在JTextField中有一个方法getText xff0c 可以返回组件中输入的字符串 xff0c 但是对于JPasswordField类 xff0c getText 方法已经不适用了 xff0c 执意使用的话 xff0c 获取的也是一串
  • 指针的大小

    说这个之前先了解几个概念 xff1a 字长 xff1a 字长是CPU的主要技术指标之一 xff0c 指的是CPU一次能并行处理的二进制的位数 xff0c 字长是8的整倍数 xff0c 通常的PC机的字长为16位 xff0c 32位 xff0
  • 程序设计思维与实践 Week6 作业A氪金带东树的直径的应用

    题意 xff1a 依次输入图中的点以及边权等信息 xff0c 最后输出每个点在图中所能到达的最远的路线的长度 例如所给的样例 xff1a input 输入文件包含多组测试数据 对于每组测试数据 xff0c 第一行一个整数N N lt 61
  • 《UNIX环境高级编程》(第二版)找不到apue.h问题

    UNIX环境高级编程 xff08 第二版 xff09 这本书 xff0c 实例程序中都包含头文件apue h xff0c 寻找linux usr include中 xff0c 缺找不到此头文件 xff0c 因此编译时会出错 实际上apue
  • java程序中,如何安全的结束一个正在运行的线程?

    如何停止java的线程一直是一个开发多线程程序常遇到的一个问题 在Java的多线程编程中 xff0c java lang Thread类型包含了一些列的方法start stop stop Throwable and suspend dest
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 如何成为一名很酷的机器人工程师

    观文有感 之 如何成为一名很酷的机器人工程师 闲来垂钓碧溪上 今天来钓一波职业规划 xff0c 记录一下笔记 xff08 特别注意 xff1a 本文中大部分内容是复制粘贴的 xff0c 只有少数位置的删改和整理 xff0c 目的是分享一下大
  • 不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

    背景 对于一些对安全级别要求高的应用 xff0c 可能只允许有GET和POST请求 xff0c 其他请求方式需要禁用 xff0c 那么可以从多个层面来进行禁用 下面从大范围禁用到小范围禁用罗列如下 xff08 假定服务容器是tomcat x
  • keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序 xff0c 编译后出现以下问题 obj pro1 axf Error L6218E Undefined symbol FLASH PrefetchBufferCmd referred fro
  • 接口测试——requests接口请求(十)

    1 requests库介绍与安装 requests库介绍 requests是一款非常火爆且常用的Python三方库能够实现HTTP协议的各种请求方法使用简单易上手 requests库的安装方法 pip install requests安装成
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    0 前言 之所以想要提取微信的聊天记录并分析是因为也开始再学习python xff0c 但是单纯看看语法什么的又很无趣 xff0c 无意间看到python可以进行微信聊天记录的分析 xff0c 就自己尝试做了一下 xff0c 感觉还是挺有意
  • 【C语言】输入一个正整数,判断其是否为素数

    span style font family none strong span style font size 18px 素数的定义 xff1a span strong span 素数 xff08 prime number xff09 又称
  • C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和

    程序分析 xff1a 抓住分子与分母的变化规律 xff1a 分子a xff1a 1 2 3 5 8 13 21 34 55 89 144 分母b xff1a 2 3 5 8 13 21 34 55 89 144 233 分母b把数赋给了分子
  • csp模拟二C咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由
  • 【C语言】输入圆的半径,求解圆的周长和面积

    公式 xff1a C 61 2 r S 61 r 代码 xff1a include lt stdio h gt int main float r PI PI 61 3 14159 printf 34 请输入圆的半径 xff1a n 34 s
  • 【C语言】输入一个年份和月份,输出该月的天数

    分析 xff1a 三种类型 xff0c A 2月比较特殊 xff0c 平年的2月只有28天 xff0c 而闰年的2月有 29 天 xff1b B 4 6 9 11月 xff1b C 其他1 3 5 7 8 10 12月 代码 xff1a 输

随机推荐

  • 一个C语言程序是由( )组成?

    A 一个主程序和若干子程序组成 B 一个或多个函数组成 C 若干过程组成 D 若干子程序组成 正确答案 B 解析 解析 一个C源程序是由一个main函数和若干个其他函数组成的 函数是C程序的基本单位 xff0c 被调用的函数可以是系统提供的
  • 【Python】Tkinter教程

    什么是Tkinter xff1f Tkinter 是 Python 的标准 GUI 库 Python 使用 Tkinter 可以快速的创建 GUI 应用程序 由于 Tkinter 是内置到 python 的安装包中 只要安装好 Python
  • 【C语言】解决error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead...

    几天编译文件的时候报错 xff0c 编译出错信息 xff1a 错误 1 error C4996 39 fopen 39 This function or variable may be unsafe Consider using fopen
  • 【C语言】数据结构C语言版 实验7 二叉树

    编写算法函数void preorder1 bintree t 实现二叉树t的非递归前序遍历 include 34 bintree h 34 char a 61 34 ABC D E F 34 扩充二叉树序树t的前序序列 函数preorder
  • 让input标签的range属性显示数值

    lt input type 61 34 range 34 name 61 34 salary 34 max 61 34 20 34 min 61 34 15 34 onchange 61 34 document getElementById
  • 【Linux】安装x11vnc和xrdp,使用windows远程deepin

    一 环境准备 1 已安装deepin 虚拟机或物理机 xff0c 安装教程自行查询 xff0c 很简单 xff0c 此处用的开源版deepin20 1做测试 目前已更新到20 2 2 启用root账号 xff0c 终端执行 xff1a su
  • 吐血整理,Ubuntu必备应用推荐,满满的干货!

    吐血整理 xff0c Ubuntu必备应用推荐 xff0c 满满的干货 xff01 哈喽 xff0c 大家好 xff0c 欢迎收看欢哥TV 我是欢哥 无论你是刚接触Ubuntu xff0c 还是最近从Windows改用Ubuntu xff0
  • Proxmox VE(PVE)添加硬盘做存储

    PVE安装后会默认将系统盘分出local和local lvm xff0c 但有时还需要别的硬盘作为虚拟主机的数据盘 xff0c 所以就需要添加硬盘进行扩充 一 硬盘分区 格式化 首先需要先先看下需添加硬盘的设备名称 xff0c 如下图的 d
  • 差分约束 解决区间选点问题

    题意 xff1a 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 input 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的 n 行 xff0c 每一行两
  • 【已解决】Microsoft Visual C++ Redistributable is not installed

    Error 导入torch xff0c 提示报错 xff1a Microsoft Visual C 43 43 Redistributable is not installed this may lead to the DLL load f
  • 设置让Windows每天在指定时间自动关机

    其实我们的电脑是可以设置每天在指定的时间点自动关机的 xff0c 具体操作方法 xff1a 1 开打电脑 xff0c 点击电脑系统左下角windows图标 xff0c 选择 控制面板 并进入 xff1b 如图 2 在控制面板界面找到 管理工
  • 在 AlmaLinux 9安装Docker Compose

    首先先安装Docker 如何在 AlmaLinux 8 上安装和使用 Docker 检查Docker版本 docker version 安装Docker Compose sudo curl L 34 https github com doc
  • 使用python搭建一个简单的FTP服务器

    从配置文件获取访问FTP服务器目录的用户名 密码 span class token keyword from span pyftpdlib span class token punctuation span authorizers span
  • 更改win10系统C:\Users\中文用户名为英文用户名

    文章目录 前言一 打开注册表二 查找路径三 重启电脑四 将用中文名与英文名进行链接五 测试是否成功 前言 注意 xff1a 做之前请先浏览一遍 xff0c 做任何操作之前都建议不要直接就做 xff0c 先看一看文档中有哪些操作点是需要小心的
  • Cityscapes数据集的深度完整解析

    cityscapes数据集是分割模型训练时比较常用的一个数据集 xff0c 他还可以用来训练GAN网络生成街景图片 数据集下载和文件夹组成 xff1a 整个数据集包含50个欧洲城市 xff0c 5000张精细标注图像 标注位于gtFine文
  • 使用分支——处理Git merge 冲突

    使用分支 处理Git merge 冲突 版本控制系统就是负责管理来自于多个提交者 xff08 通常是开发者 xff09 之间的提交的 有时候多个开发者可能会编辑同一部分内容 一旦开发者A编辑了开发者B正在编辑的内容 xff0c 冲突就会产生
  • 纯手工解密几大在线js加密网站(1)

    0x0 开头 最近闲来无事 xff0c 来看一下目前网络上哪家加密工具的强度最高的 本人技术有限 xff0c 最终结果不能代表什么 xff0c 大家有遇到什么其他的js加密技术破解难题的 xff0c 也可以一起互相讨论 xff0c 也可以问
  • 纯手工解密几大在线js加密网站(3)

    0x0 开头 续接上章 xff0c 心血来潮想挨个破解一下各大js加密的网站 xff0c 了解一下现有的js加密的逻辑 0x1 介绍 Sojson支持js的不可逆混淆加密 xff0c 和很多高级的加密配置 xff0c 还增加了小白专用的一键
  • 如何在局域网内设置多个网段

    连接状态中的 属性 按钮 xff0c 选择 TCP IPv4 协议 xff0c 点击下面的 属性 按钮 xff0c 点击 高级 按钮 在高级TCP IP设置里面点击 添加 按钮 输入新网段的ip地址 xff08 以192网段为例 xff09
  • B-猫猫向前冲(拓扑排序

    题意 xff1a input 输入有若干组 xff0c 每组中的第一行为二个数N xff08 1 lt 61 N lt 61 500 xff09 xff0c M xff1b 其中N表示猫猫的个数 xff0c M表示接着有M行的输入数据 接下