每日OJ题_牛客_AB13【模板】拓扑排序_C++_Java

目录

牛客_AB13【模板】拓扑排序

题目解析

C++代码

Java代码


牛客_AB13【模板】拓扑排序

【模板】拓扑排序_牛客题霸_牛客网 (nowcoder.com)

描述

        给定一个包含nn个点mm条边的有向无环图,求出该图的拓扑序。若图的拓扑序不唯一,输出任意合法的拓扑序即可。若该图不能拓扑排序,输出−1。


题目解析

拓扑排序裸题,步骤:
  1. 建图。
  2. 入队为 0 的点入队。
  3. 最后来一次层序遍历即可。

C++代码

#include <iostream>
#include <queue>
#include <unordered_map>
#include <vector>
using namespace std;
const int N = 2 * 1e5 + 1;
int main()
{int n = 0, m = 0;cin >> n >> m;int x = 0, y = 0;unordered_map<int, vector<int>> Edge;vector<int> in(N);while (cin >> x >> y) // x 指向 y{Edge[x].push_back(y);in[y]++;}// for(auto& [a, b] : Edge)// {// cout << a << " -> ";// for(auto& e : b)// {// cout << e << " ";// }// cout << endl;// }// for(auto& e : in)// {// if(e != 0)// cout << e << " ";// }// cout << endl;priority_queue<int> q;for (int i = 1; i <= n; ++i){if (in[i] == 0){q.push(i);// cout << "begin" << i;}}vector<int> res;while (q.size()){int tmp = q.top();q.pop();res.push_back(tmp);for (auto& e : Edge[tmp]) // tmp指向的边的入度减一{in[e]--;if (in[e] == 0) // 减为0了就进队列q.push(e);}// // Edge.erase(tmp); // 加这步?// for(auto& [a, b] : Edge)// {// cout << a << " -> ";// for(auto& e : b)// {// cout << e << " ";// }// cout << endl;// }// for(int i = 1; i <= n; ++i)// {// cout << in[i] << " ";// }// cout << endl;}if(res.size() != n){cout << -1;}else{for (int i = 0; i < n - 1; ++i){cout << res[i] << " ";}cout << res[n - 1]; // 666666666666666}return 0;
}

Java代码

import java.util.*;
import java.io.*;
public class Main
{public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static int n, m;public static Map<Integer, List<Integer>> edges = new HashMap<>(); // 存储图public static int[] cnt; //统计⼊度信息public static void main(String[] args) throws IOException{n = in.nextInt(); m = in.nextInt();cnt = new int[n + 1];// 1. 建图for(int i = 0; i < m; i++){int a = in.nextInt(), b = in.nextInt();// a -> bcnt[b]++;if(!edges.containsKey(a)){edges.put(a, new ArrayList<>());}edges.get(a).add(b);}// 2. 拓扑排序Queue<Integer> q = new LinkedList<>();for(int i = 1; i <= n; i++){if(cnt[i] == 0){q.add(i);}}int[] ret = new int[n]; // 统计拓扑排序的结果int pos = 0;while(!q.isEmpty()){int t = q.poll();ret[pos++] = t;for(int a : edges.getOrDefault(t, new ArrayList<>())){cnt[a]--;if(cnt[a] == 0){q.add(a);}}}if(pos == n){// 输出结果:输出最后⼀个数的时候,不能有空格for(int i = 0; i < n - 1; i++){out.print(ret[i] + " ");}out.println(ret[n - 1]);}else{out.println(-1);}out.close();}
}
class Read // ⾃定义快速读⼊
{StringTokenizer st = new StringTokenizer("");BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {while(!st.hasMoreTokens()){st = new StringTokenizer(bf.readLine());}return st.nextToken();}String nextLine() throws IOException {return bf.readLine();}int nextInt() throws IOException {return Integer.parseInt(next());}long nextLong() throws IOException {return Long.parseLong(next());}double nextDouble() throws IOException {return Double.parseDouble(next());}
}

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

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

相关文章

Matlab|基于遗传粒子群算法的无人机路径规划【遗传算法|基本粒子群|遗传粒子群三种方法对比】

目录 主要内容 模型研究 部分代码 结果一览 下载链接 主要内容 为了更高效地完成复杂未知环境下的无人机快速探索任务&#xff0c;很多智能算法被应用于无人机路径规划方面的研究&#xff0c;但是传统粒子群算法存在粒子更新思路单一、随机性受限、收敛速度慢…

【笔记】DDD领域驱动设计

同名读书笔记&#xff0c;对于一些自觉重要的点进行记录。 扩展资源&#xff1a;github.com/evancyz/ddd-learning UML中类图的一些基本知识 - jack_Meng - 博客园 最后的第四部分暂时没看 Part Two 模型驱动设计的构造块 Chapter 5 软件中所表示的模型 5.2 模式&#xff1a;…

学习日志35

拆卸线问题&#xff08;Disassembly Line Balancing Problem, DLBP&#xff09;是生产工程和运筹学中的一个特殊问题&#xff0c;它涉及到将废弃产品有效地拆解成可回收利用的部件和材料。随着环保意识的增强和资源回收技术的发展&#xff0c;DLBP逐渐成为研究的热点。这类问题…

MySQL中的嵌套查询

1. 嵌套查询的定义 嵌套查询指在一个查询语句的某个部分嵌入一个子查询。 嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先&#xff0c;子查询执行并返回一个结果集&#xff0c;可能是一个值、一行或多行数据。接着&#xff0c;外层查询使用子查询的结果继续对数…

FireRedTTS - 小红书最新开源AI语音克隆合成系统 免训练一键音频克隆 本地一键整合包下载

小红书技术团队FireRed最近推出了一款名为FireRedTTS的先进语音合成系统&#xff0c;该系统能够基于少量参考音频快速模仿任意音色和说话风格&#xff0c;实现独特的音频内容创造。 FireRedTTS 只需要给定文本和几秒钟参考音频&#xff0c;无需训练&#xff0c;就可模仿任意音色…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找&#xff0c;每次找到可到达的最远位置&#xff0c;就可以在线性时间内得到最少的跳跃次数。 例如&#xff0c;对于数组 [2,3,1,2,4,2,3]&#xff0c;初始位置是下标 0&#xff0c;从下标 0 出发&#xff0c;最远可到达下标 2。下标 0 可到达的…

如何在IDEA使用git上传代码的时候过滤掉非.java文件

1.情况分析 我们的java上传代码的时候&#xff0c;经常会出现这个xml,等等的无关文件&#xff0c;但是这个时候我们使用这个里面的git上传的时候无法过滤掉&#xff0c;我们在自己的这个代码仓库查看的时候经常显示无关文件&#xff0c;这个时候我们就可以通过相关配置进行文件…

MySQL连接查询:联合查询

先看我的表结构 emp表 联合查询的关键字&#xff08;union all, union&#xff09; 联合查询 基本语法 select 字段列表 表A union all select 字段列表 表B 例子&#xff1a;将薪资低于5000的员工&#xff0c; 和 年龄大于50 岁的员工全部查询出来 第一种 select * fr…

【PostgreSQL】运维篇—— 实战案例分析:从需求到实现

假设有一个电子商务平台&#xff0c;需要管理产品、订单和客户信息&#xff0c;如何设计数据库架构以满足业务需求&#xff0c;并实现相关的功能。 一、需求分析 1. 业务背景 某电子商务平台需要一个数据库来存储和管理以下信息&#xff1a; 产品信息&#xff1a;包括产品名…

Java版本的SSE服务端实现样例

简单记录一下使用netty方式实现SSE的服务端功能 目录 简要说明基于Netty功能需求后端代码1. 创建一个SpringBoot 应用2. 创建服务端功能3. 创建前端功能4. 测试SSE 封装为组件 简要说明 Server-Sent Events (SSE) 是一种用于在客户端和服务器之间建立单向通信的技术。 它允许服…

通信工程学习:什么是RFID射频识别

RFID&#xff1a;射频识别 RFID射频识别&#xff08;Radio Frequency Identification&#xff09;&#xff0c;又称为无线射频识别&#xff0c;是一种非接触式的自动识别技术。它通过无线电信号来识别特定目标并读写相关数据&#xff0c;而无需在识别系统与特定目标之间建立机械…

在安卓中使用 `mobile-ffmpeg` 压缩后的视频,浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案

在安卓中使用 mobile-ffmpeg 压缩后的视频&#xff0c;浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案 你可能在安卓开发中使用了 mobile-ffmpeg 进行视频压缩&#xff0c;而当你尝试在浏览器中在线播放压缩后的视频时&#xff0c;看到提示&#xff1a;…

任务【浦语提示词工程实践】

0.1 环境配置 首先点击左上角图标&#xff0c;打开Terminal&#xff0c;运行如下脚本创建虚拟环境&#xff1a; # 创建虚拟环境 conda create -n langgpt python3.10 -y 运行下面的命令&#xff0c;激活虚拟环境&#xff1a; conda activate langgpt 之后的操作都要在这个环境…

socket和http区别

socket和http区别&#xff1a;1、主体不同&#xff1b;2、所处层次不同&#xff1b;3、连接状态不同&#xff1b;4、传输数据量不同&#xff1b;5、数据安全性不同&#xff1b;6、连接方式不同。其中&#xff0c;主体不同指的是socke是一个调用接口&#xff08;API&#xff09;…

TypeScript 中函数的理解及其与 JavaScript 函数的差异

文章目录 一、函数概述二、TypeScript 函数的使用函数类型的声明可选参数剩余参数函数重载 三、TypeScript 与 JavaScript 函数的差异 一、函数概述 在 JavaScript 应用程序中&#xff0c;函数是核心组成部分&#xff0c;它们帮助我们实现代码的抽象、模拟类、隐藏信息和模块化…

【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000013 案例 EXCEL筛选与高级筛选。使用的软件&#…

【华为OD机试真题】95、最少面试官数

package mainimport ("fmt""sort" )type s struct {start intend intworkCount int }type duration struct {start intend int }// 查询时间段内是否有可用的面试官 func getFreeS(sList []*s, d *duration, workCountLimit int) (sIndex int)…

C0005.Clion中移动ui文件到新目录后,报错问题的解决

报错问题如下 AutoUic error ------------- "SRC:/confirmwizardpage.cpp" includes the uic file "ui_confirmwizardpage.h", but the user interface file "confirmwizardpage.ui" could not be found in the following directories"SRC…

Redis面试篇2

1、Redis缓存刷新策略有哪些&#xff1f; Redis提供了以下几种缓存刷新策略 基于过期时间&#xff1a;可以设置key的过期时间&#xff0c;当过期时间到达后&#xff0c;Redis会自动删除该key。基于LRU算法&#xff1a;Redis使用LRU算法来淘汰最近最少使用的key&#xff0c;以保…

内部类基础

成员内部类 // 外部类 public class OuterClass { private String outerVar "Outer Variable"; // 成员内部类 public class MemberInnerClass { private String innerVar "Inner Variable"; // 内部类的方法&#xff0c;可以访问外部类的成员变…