确定比赛名次-拓扑排序

题目链接:https://vjudge.net/problem/HDU-1285

邻接矩阵存储版

#include<iostream>
#include<queue>
#include<cstring>
#include<functional>
#include<vector>
using namespace std;
const int N = 510;
int n, m;int g[N][N], in[N]; // in[i]记录i的入度数   g为邻接矩阵void solve() {priority_queue<int, vector<int>, greater<int> > q;  // 使用小根堆(题目要求:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前)vector<int> ans;memset(g, 0, sizeof g);memset(in, 0, sizeof in);for (int i = 0; i < m; i ++) {int a, b;cin >> a >> b;if (g[a][b]) continue; // 用邻接矩阵注意重复边 g[a][b] = 1;in[b] ++;}for (int i = 1; i <= n; i ++)if (in[i] == 0) {q.push(i);while(!q.empty()) {int t = q.top();q.pop();ans.emplace_back(t);for (int i = 1; i <= n; i ++) {if (g[t][i] == 1) {in[i] --;if (in[i] == 0)q.push(i);}}}for (int i = 0; i < ans.size(); i ++) {if (i == 0) cout << ans[i];else cout << " " << ans[i];}cout << endl;
}int main() {while(cin >> n >> m) {solve();}return 0;
}

邻接表版

#include <iostream>
#include <vector>
#include <queue>using namespace std;int main() {int n, m;while(cin >> n >> m) {vector<vector<int> > g(n + 1);vector<int> indegree(n + 1);// 符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前priority_queue<int, vector<int>, greater<int> > heap; // 小顶堆// 初始图,并统计入度for (int i = 0; i < m; i ++) {int a, b;cin >> a >> b;g[a].push_back(b);indegree[b] ++;}// 将入度为零的加入小顶堆for (int i = 1; i <= n; i ++) if(indegree[i] == 0) heap.push(i);vector<int> ans; // ans 用于收集结果 while(!heap.empty()) {int t = heap.top();heap.pop();ans.emplace_back(t);// 更新入度数组 ,入度为零则加入队列 for (int i = 0; i < g[t].size(); i ++) { indegree[g[t][i]] --;if (indegree[g[t][i]] == 0) {heap.push(g[t][i]);}}}for (int i = 0; i < ans.size(); i ++) {if (i == 0) cout << ans[i];else cout << " " << ans[i];}cout << endl;}return 0;
}

链式前向星版

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 550;
const int M = 2.5e5;
int n, m, idx;
int indegree[N];
int head[N];
struct edge {int to, next;
};
edge e[M];
void add(int a, int b) {e[idx].to = b;e[idx].next = head[a];head[a] = idx;idx++;
}
void init() {idx = 0;fill(head, head + N, -1);
}void solve() {priority_queue<int, vector<int>, greater<int> > q;vector<int> ans;init();memset(indegree, 0, sizeof indegree);for (int i = 0; i < m; i ++) {int a, b;cin >> a >> b;add(a, b);indegree[b] ++;}for (int i = 1; i <= n; i ++)if (indegree[i] == 0)q.push(i);while(!q.empty()) {int t = q.top();q.pop();ans.emplace_back(t);for (int i = head[t]; ~i; i = e[i].next) {indegree[e[i].to] --;if (indegree[e[i].to] == 0) {q.push(e[i].to);}}}for (int i = 0; i < ans.size(); i ++) {if (i == 0) cout << ans[i];else cout << " " << ans[i];}cout << endl;
}int main() {while(cin >> n >> m) {solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 面试题及答案

CSS 面试题及答案 问题&#xff1a;什么是盒模型&#xff08;Box Model&#xff09;&#xff1f; 答案&#xff1a; 盒模型是指在网页布局时&#xff0c;每个元素都被看作一个矩形盒子&#xff0c;包括内容区域、内边距、边框和外边距。这些部分组合在一起构成了元素的盒模型。…

C++Qt学习——添加资源文件

目录 1、创建好了文件之后&#xff0c;在左边空白处按下CtrlN&#xff0c;创建Qt 以及Qt Resource File 2、写入名称&#xff0c;点击下一步 3、可以发现已经创建好啦。 4、点击Add Prefix 5、写上前缀&#xff0c;最好加上斜杠 6、选择提前放好的图片或者icon 7、发…

安卓Java面试题 91- 100

91. 请描述一下Intent 和 IntentFilter ?Intent是组件的通讯使者,可以在组件间传递消息和数据。 IntentFilter是intent的筛选器,可以对intent的action,data,catgory,uri这些属性进行筛选,确定符合的目标组件🚀🚀🚀🚀🚀🚀92. 阐述什么是IntentService?有何优…

Python异步编程探究:深入理解asyncio的使用和原理【第130篇—asyncio】

Python异步编程探究&#xff1a;深入理解asyncio的使用和原理 随着计算机应用程序的复杂性不断增加&#xff0c;对于高效处理I/O密集型任务的需求也越来越迫切。在Python中&#xff0c;asyncio模块提供了一种强大的异步编程方式&#xff0c;使得开发者能够轻松地处理并发任务&…

Vulnhub - DC-1

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog DC-1 靶机下载地址&#xff1a;DC: 1 ~ VulnHub 0x01 信息收集 Nmap扫描目标主机&#xff0c;发现开…

Springboot 使用【过滤器】实现在请求到达 Controller 之前修改请求体参数和在结果返回之前修改响应体

文章目录 前情提要解决方案自定义 HttpServletRequest 包装类 RequestWrapper自定义 HttpServletResponse 包装类 ResponseWrapper自定义过滤器 MiddlewareFilter配置过滤器注解配置类 编写 Controller 测试 前情提要 在项目中需要使用过滤器 在请求调用 Controller 方法前修改…

Linux-轻量级数据库sqlite-015

1【sqlite】安装 1.让虚拟机能够上网 2.【apt-get】工具集配置好 3.【sudo apt-get install sqlite3】 4.启动【sqlite3】 【sqlite3】 5.输入【.quit】退出2数据库简介 2.1常见的几种数据结构及数据库 1.数组、链表、文件、数据库&#xff08;1&#xff09;存储位置及存储…

volatile关键字用处和场景?

什么是volatile关键字 在C语言和Java中&#xff0c;它是一种特殊的类型修饰符&#xff0c;用来告诉编译器该变量可能会被意外地改变。这样&#xff0c;每次存取该变量时&#xff0c;编译器都不会对其进行缓存优化&#xff0c;而是直接从内存中读取或写入&#xff0c;提供了对特…

面试题 --- jdbc执行流程、MyBatis执行流程、MyBatis拦截器配置流程

jdbc执行流程 1. 注册驱动 2. 创建数据库操作对象 3. 执行sql语句 4 .处理操作结果 5 .关闭连接释放资源 MyBatis 执行流程 Executor执行器、MappedStatement 对象、 StatementHandler 语句处理器 关系可以用以下步骤概括 用户通过 SqlSession 调用一个方法&#xff0c;Sq…

GC-垃圾回收

一、what&#xff08;概念&#xff09; garbage collection 二、where&#xff08;作用的区域&#xff09; 堆和方法区 &#xff08;栈和PC随着线程的创建而产生&#xff0c;销毁而消失&#xff09; 三、when&#xff08;什么时候进行垃圾回收&#xff09; 1、引用计数法&#…

双链表(上)

1.结构 1.带头双向循环链表 注意&#xff1a;这里的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在单链表阶段称呼不严 谨&#xff0c;但是为了同学们更好的理解就直接称为单链表的头节点。 带头链表里的头节点&#xff0c;实际为“哨兵位”&#xff0c…

大模型在语音识别领域的最新进展与挑战

摘要&#xff1a; 本文概述了大模型在语音识别领域的最新进展与挑战&#xff0c;包括基础知识、核心组件、实现步骤、代码示例、技巧与实践、性能优化与测试、常见问题与解答、结论与展望等内容。 引言 语音识别技术的发展历程中&#xff0c;大模型的应用和重要性日益凸显。…

OMP实现MATLAB压缩感知实例

OMP(Orthogonal Matching Pursuit,正交匹配追踪)算法是一种用于稀疏信号重构的迭代算法。它的基本思想是在每一步选择与当前残差最相关的原子(或基),并使用它来更新估计值,直到满足停止准则为止。 基本流程 下面是OMP算法的基本流程: 初始化: 将残差初始化为原始信号…

【ARM】MDK在programming algorithm界面添加FLM

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决在programming algorithm界面中无法添加想要的Flash编程算法的问题 2、 问题场景 在对于Debug进行Flash Download进行配置的时候&#xff0c;在programming algorithm界面中有对应的Flash编程算法。可以通过…

数据结构 之 树

目录 1. 定义&#xff1a; 2. 概念&#xff08;重要&#xff09;&#xff1a; 3. 树的表示形式&#xff1a; 4. 树的应用&#xff1a; 1. 定义&#xff1a; 树是一种非线性的数据结构&#xff0c;&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有…

LeetCode——贪心算法(Java)

贪心算法 简介[简单] 455. 分发饼干[中等] 376. 摆动序列[中等] 53. 最大子数组和[中等] 122. 买卖股票的最佳时机 II[中等] 55. 跳跃游戏 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录的刷题路线。会附上一些个人的思路&#xff0c;如果有错误&#xf…

动态导入图片

起因&#xff1a;动态图片会自动拼接根路径&#xff0c;为了方便图片要放在public下解决&#xff1a;使用require引入图片资源注意&#xff1a;不能动态路径中使用require&#xff0c;如<img :src"require(…/assets/${item.imgUrl})" alt"" />{{ it…

MFC中内存共享调用方法及使用示例

在MFC&#xff08;Microsoft Foundation Classes&#xff09;中&#xff0c;内存共享是一种实现进程间通信的有效方法。以下是MFC中内存共享的调用方法以及一个基本的使用示例&#xff1a; 调用方法&#xff1a; 创建文件映射对象&#xff1a;使用CreateFileMapping函数创建一…

在 debian 虚拟机里如何设置 iso 文件为本地安装源

文章目录 在debian虚拟机里如何设置iso文件为本地安装源 <2023-07-10 周一> 在debian虚拟机里如何设置iso文件为本地安装源 这里有个坑&#xff0c;首先必须要先将iso文件加载好&#xff08;如何运行apt-cdrom后提示加载并按回车的话&#xff0c;后面可能出设置失败&am…

ARM 汇编指令:(三)运算处理指令

目录 一.add指令 二.sub指令 三.MUL指令 一.add指令 add用于执行实现两个寄存器或寄存机或寄存器与立即数的相加操作。它可以用于整数、浮点数等各种数据类型的加法运算。 ADD{cond}{S} Rd,操作数,操作数 1.不带进位加法指令add add r1, r2, #4 //r1 r2 4 add r1, r2 …