LeetCode每日一题:1462. 课程表 IV(2023.9.12 C++)

news2024/11/14 16:40:19

目录

1462. 课程表 IV

题目描述:

实现代码与解析:

拓扑排序

原理思路:


1462. 课程表 IV

题目描述:

        你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。

  • 有的课会有直接的先修课程,比如如果想上课程 1 ,你必须先上课程 0 ,那么会以 [0,1] 数对的形式给出先修课程数对。

先决条件也可以是 间接 的。如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c 的先决条件。

你也得到一个数组 queries ,其中 queries[j] = [uj, vj]。对于第 j 个查询,您应该回答课程 uj 是否是课程 vj 的先决条件。

返回一个布尔数组 answer ,其中 answer[j] 是第 j 个查询的答案。

示例 1:

输入:numCourses = 2, prerequisites = [[1,0]], queries = [[0,1],[1,0]]
输出:[false,true]
解释:课程 0 不是课程 1 的先修课程,但课程 1 是课程 0 的先修课程。

示例 2:

输入:numCourses = 2, prerequisites = [], queries = [[1,0],[0,1]]
输出:[false,false]
解释:没有先修课程对,所以每门课程之间是独立的。

示例 3:

输入:numCourses = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]]
输出:[true,true]

提示:

  • 2 <= numCourses <= 100
  • 0 <= prerequisites.length <= (numCourses * (numCourses - 1) / 2)
  • prerequisites[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • 每一对 [ai, bi] 都 不同
  • 先修课程图中没有环。
  • 1 <= queries.length <= 104
  • 0 <= ui, vi <= n - 1
  • ui != vi

实现代码与解析:

拓扑排序

class Solution {
public:
    // 邻接表
    vector<int> e = vector<int>(5010, 0), ne = vector<int>(5010, 0), h = vector<int>(110, -1);
    int idx = 0;

    // 加边
    void add (int a, int b)
    {
        e[idx] = b, ne[idx] = h[a], h[a] = idx++;
    }

    vector<bool> checkIfPrerequisite(int numCourses, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
        vector<vector<bool>> sumres(numCourses, vector<bool>(numCourses));
        vector<bool> res;
        vector<int> indeg(numCourses, 0);

        for (auto t: prerequisites)
        {
            add(t[0], t[1]);
            indeg[t[1]]++; // 入度++
        }

        queue<int> q;
        for (int i = 0; i < numCourses; i++)
        {
            if (indeg[i] == 0) q.push(i); // 度为 0 入队
        }

        // bfs
        while (q.size())
        {
            int t = q.front();
            q.pop();

            for (int i = h[t]; ~i; i = ne[i])
            {
                int j = e[i];
                sumres[t][j] = true; // 直接相连true

                indeg[j]--; // 入度--
                if (indeg[j] == 0) q.push(j);

                for (int k = 0; k < numCourses; k++)
                    sumres[k][j] = sumres[k][t] || sumres[k][j]; // 传递, 间接相连

            }
        }

        for (auto t: queries)
        {
            res.push_back(sumres[t[0]][t[1]]);
        }
        return res;
    }
};

原理思路:

        bfs拓扑排序。只深搜会超时。

拓扑排序详解(带有C++模板)_Cosmoshhhyyy的博客-CSDN博客

        因为课程间接传递也可以,注意把上一个结点信息,传递给下一个结点即可。和最短路算法的最短路更新相似。

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

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

相关文章

分布式文件系统对比与选型参考

目录 一、分布式文件系统 1、 数据的存储方式&#xff1a; 2、 数据的读取速率 3、 数据的安全机制 二、主流分布式文件系统介绍 1. GFS&#xff08;Google File System&#xff09; 2. HDFS&#xff08;Hadoop Distributed File System&#xff09; 3. Ceph …

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…

对话大模型中的情感支持及商业化落地

在1982年经典科幻电影《银翼杀手》中&#xff0c;仿生人瑞秋因为被植入记忆而以为自己是真人&#xff0c;当被告知自己是仿生人时&#xff0c;她拒绝相信&#xff0c;流下了眼泪。如今&#xff0c;随着AI领域对话大模型技术的发展&#xff0c;“比人更像真人”的人工智能正从梦…

vue实现左右伸缩(el-drawer自定义位置展开收缩)

内容左右收缩展开 实现需求实现效果自定义抽屉(el-drawer)展开位置实现原理 js方法&#xff0c;点击的时候抽屉伸缩展开&#xff0c;并且给左侧右侧内容对应的宽度第二种方法 实现需求 页面内容是左右布局&#xff0c;需求想让左侧内容可收缩&#xff0c;然后展示完全右侧内容。…

模拟经营类游戏是怎么开发的?

模拟经营类游戏开发是一个充满挑战但也充满乐趣的领域。下面是一些步骤和关键考虑因素&#xff0c;可以帮助您开始开发自己的模拟经营游戏&#xff1a; 明确游戏概念&#xff1a; 确定游戏开发的主题和类型&#xff0c;例如城市建设、农场经营、餐厅经营等。 制定一个引人入胜…

《论文阅读》通过动态融入常识知识来提高同理心对话的生成

《论文阅读》通过动态融入常识知识来提高同理心对话的生成 前言简介模型架构Contextual ProbingContextual Unification Workspace代码实现Knowledge-Aware Decoder实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到…

文件路径中的/,\的区别和文件路径的常见用法

/是Unix和类Unix系统上的路径分隔符.现代Windows通常可以同时使用\和/交换文件路径,但微软\几十年来一直主张使用路径分隔符. 关于文件路径的常用方法再学习一下&#xff1a; "./"&#xff1a;代表目前所在的目录 "../"&#xff1a;代表上一层目录 以&q…

如何在Blender中压缩/减小GLTF模型的大小

GLTF 如何在Blender中压缩/减小GLTF模型的大小 Blender是一款功能强大的开源软件&#xff0c;旨在创建3D图形&#xff0c;动画和视觉效果。它支持多种文件格式的导入和导出&#xff0c;包括GLB&#xff0c;GLTF&#xff0c;DAE&#xff0c;OBJ&#xff0c;ABC&#xff0c;USD…

CAD批量转换低版本怎么转?教你一看就会的转换方法

CAD文件需要转换版本是因为不同版本的CAD软件可能不兼容。这意味着&#xff0c;如果在一个版本的CAD软件中创建了一个文件&#xff0c;可能无法在另一个版本的CAD软件中打开它。这可能会导致数据丢失或格式错误。 为了避免这种情况&#xff0c;需要将CAD文件转换为适当的版本以…

短视频seo矩阵系统源码开发与部署全解析

在这个数字化快速发展的时代&#xff0c;短视频已经成为人们获取娱乐&#xff0c;学习&#xff0c;商业信息的主要途径之一。对于企业来说&#xff0c;利用短视频矩阵进行高效且精准的营销推广&#xff0c;无疑是一个重要的战略方向。本文将详细介绍如何进行短视频矩阵源码的开…

【开源】无忧企业文档文库管理界面介绍

无忧企业文档是软开企服研发的一款集知识库、网盘、在线协同为一体的企业级办公软件&#xff0c;有完全免费的开源版&#xff0c;也有功能丰富的商业版。开源版在社区开放了全量源码&#xff0c;商业版支持提供源码&#xff0c;支持二次开发&#xff0c;适合中小企业使用。 文…

企业如何简化线上营销服务流程,让服务更通畅?

在线客服是现代企业服务的重要组成部分&#xff0c;在线客服的质量在很大程度上决定客户的满意度和忠诚度。企业如何简化线上营销服务流程&#xff0c;让服务更通畅&#xff1f;本文将就此探讨。 一、建立流程管理体系 在线上营销服务中&#xff0c;建立流程管理体系可以帮助企…

期权期货品种的交易时间规定与限制

期权和期货品种是在交易所进行交易的&#xff0c;期货交易所有固定的工作时间&#xff0c;并不是24小时都可以交易的&#xff0c;一般国内的期货交易所有日盘和夜盘&#xff0c;不同交易所对交易时间的规定有所不同&#xff0c;交易的期货品种不同&#xff0c;交易时间也是有所…

真实的产品开发中,后端的设计规约可以写哪些

真实的产品开发中&#xff0c;后端的设计规约可以写哪些 产品开发的后端设计规约通常包括以下内容&#xff1a; 数据模型设计&#xff1a;详细描述数据库的结构&#xff0c;包括数据表的设计、字段的定义和关系的设置等。 业务逻辑设计&#xff1a;详细描述后端的业务逻辑&a…

官宣!不藏了~AnyCase 4.0 真“箱”

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 重磅好消息&#xff01;&#xff01;&#xff01; 2023年9月15日&#xff0c;我们正式官宣啦~ 经过持续地升级迭代和精心打磨 箱讯科技AnyCase4.0成功上线&#xff01; 梦想为引&#xff0c;创新为帆&…

STM32F103VET6基于ENC28J60移植LWIP1.4.1(标准库,FreeRTOS)

目录 准备模板LWIP文件夹新建组魔术棒修改lwipopts.h修改sys_arch.h修改sys_arch.c修改LWIP初始化函数中断文件主文件测试源码 在进行移植之前&#xff0c;大家需要学会FreeRTOS的基本使用与无OS移植LWIP的经验&#xff0c;因为基于FreeRTOS移植LWIP需要准备一个FreeRTOS模板项…

从投机走到娱乐——Web3 游戏八月月报

作者&#xff1a;lesleyfootprint.network 8月份&#xff0c;加密市场波动加剧&#xff0c;比特币价格在 23,664 美元到 30,057 美元之间波动。与之相比&#xff0c;游戏领域仍然相对平稳&#xff0c;但从宏观的角度来看&#xff0c;人们对 Web3 游戏的看法正在发生转变。 许…

免费,开源,可批量的离线图片文字提取软件OCR

Umi-OCR 文字识别工具 免费&#xff0c;开源&#xff0c;可批量的离线OCR软件 适用于 Windows7 x64 及以上 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#xff1a;解压即用&#xff0c;离线运行&#xff0c;无需网络。批量&#xff1a;可批量导入处理图片…

spring boot项目一次性能测试的总结

满足标准&#xff1a;并发大于等于100 &#xff0c;平均响应时间小于等于3秒 项目在压测过程中并发数只有50&#xff0c;在并发数100的情况下有很多请求链接是失败的 我们该如何入手去处理这些问题并提高并发数呢&#xff1f; 1、首先从压测结果入手&#xff0c;对不满足标准…