算法分析与设计期中测试——拓扑序[Special judge]

【周赛-中等】5480. 可以到达所有点的最少点数目 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 示例 1: 输入:n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] 输出:[0,3] 解释:从单个节点出发无法到达所有节点。从 0 出发我们可以到达 [0, 阅读详情

在图论中,拓扑序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列. 且该序列必须满足下面两个条件:

  1. 每个顶点出现且只出现一次.
  2. 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面.

对于一个含有n个节点的有向无环图(节点编号0到n-1),输出它的一个拓扑序.

图的节点数和边数均不多于100000,保证输入的图是一个无环图.

请为下面的Solution类实现解决上述问题的topologicalSort函数,函数参数中n为图的节点数,edges是边集,edges[i]表示第i条边从edges[i].first指向edges[i].second. 函数返回值为有向图的一个拓扑序. 有向图有多个拓扑序时,输出任意一个即可.

class Solution {
public:
vector topologicalSort(int n, vector< pair < int, int>>& edges) {
}
};

例1:
n = 3,edges = {(0, 1), (0, 2)},函数应返回{0, 1, 2}或者{0, 2, 1}.

例2:
n = 4,edges = {(0, 1), (0, 2), (1, 2), (3, 0)},函数应返回{3, 0, 1, 2}.

注意:你只需要提交Solution类的代码,你在本地可以编写main函数测试程序,但不需要提交main函数的代码. 注意不要修改类和函数的名称.

拓扑排序问题,简单的算法就是每次输出入度为0的点,从图中删除,然后继续找入度为0的点。要注意优化的地方就是改用一个邻接表来存储边,这样在就不用每次都去遍历所有的边,避免超时。


class Solution {
public:
    vector<int> topologicalSort(int n, vector<pair<int, int>>& edges) {
    //用一个队列来存储所有入度为0的点
        queue<int> DegreeZero;
        //用一个vector来存储所有的入度
        vector<int> indegree(n);
        vector<vector<int>> myedges(n);
        vector<int> result;
        for (int i = 0; i < n; i++) {
            indegree[i] = 0;
        }
        for (int i = 0; i < edges.size(); i++) {
            int toV = edges[i].second;
            indegree[toV]++;
            myedges[edges[i].first].push_back(edges[i].second);
        }
        for (int i = 0; i < n; i++) {
            if (indegree[i] == 0) {
                DegreeZero.push(i);
            }
        }

        while (!DegreeZero.empty()) {
            int temp = DegreeZero.front();
            result.push_back(temp);
            DegreeZero.pop();
            for (int i = 0; i < myedges[temp].size(); i++) {
                indegree[myedges[temp][i]]--;
                if (indegree[myedges[temp][i]] == 0) {
                    DegreeZero.push(myedges[temp][i]);
                }
            }

        }
        return result;
    }

};
算法期中1004. Kahn算法求解有向无环图拓扑排序 Kahn算法 拓扑排序 阅读详情

相关推荐

关于一道Special Judge输出的题的反思

题目来源:POJ1861 Network 写这道题并不是因为我真的是错在了输出上,其实这就是一道大水题,纯Kruskal算法,WA了几次是因为数组开小了,导致了WA了好几次,让我怀疑这道题的输出上,所以就一直在输出上做文章,其实不然。但还是引起了我对一些输出时Special Judge的题目的思考,对于这样的题目,样例输出只能作为一种启发,而不能从输出上得到一些题目更多的信息,如果一直纠结在输出

Learning By Doing 717

[Leetcode/python] 第33场双周赛

千位分隔数 给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。’ 解: 打卡题。 WA了三次- - 点好写成了逗号 数位不对 前导零处理 class Solution: def thousandSeparator(self, n: int) -> str: ret = "" def f(x): if len(x) < 3: return "0"*

其实我是一个艺术家 1415

构造问题(special judge)

构造问题的核心就是推出通式解决问题,找到一个手填的一般方案,这才能编程表达出来。。 在数据规模较小的时候优先考虑递归 2015 icpc 北京站 I 题 snake carpet 题目大意:有n条蛇,第i条蛇长度为i,要求第奇数个蛇有奇数个转折点(除了1)第偶数个蛇有偶数个转折点(除了2) 密铺矩形,输出矩形的长宽 并顺序输出蛇的坐标 思路: 先固定矩形,根据等差数列公式:偶...

neuq_zsmj的博客 1282

有向无环图DAG 拓扑排序 代码解释

目录:   DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化   定义   在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting)。 每个顶点出现且只出现一次; 若A在序列中排在B的前面,则在图中不存在从B到A的路径。 也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使...

湾区人工智能 2064

基于Openrouter的API调用免费大模型

Openrouter 是一个 AI 模型聚合平台,整合了全球 200 多种主流 AI 模型,包括 GPT-4、Claude、Gemini 等,以及国产通义千问、DeepSeek 等。其核心优势是统一的 API 设计,开发者仅需少量代码即可与多个模型交互,还支持自动路由与回退机制。用户可通过 OpenAI SDK 或 LangChain 调用 Openrouter 中的模型。

MurphyStar的博客 6200

阿里开源最强数字人工具 EchoMimicV2,本地部署(一)

EchoMimicV2是阿里推出的半身人体AI数字人项目,基于参考图片、音频剪辑和手部姿势序列生成高质量动画视频,确保音频内容与半身动作的一致性。现在本地部署,安装体验一下。

缘分天空的专栏 4614

Leetcode 5300:有向无环图中一个节点的所有祖先

题目描述 给你一个正整数n,它表示一个有向无环图中节点的数目,节点编号为0到n - 1(包括两者)。 给你一个二维整数数组edges,其中edges[i] = [fromi, toi]表示图中一条从fromi到toi的单向边。 请你返回一个数组answer,其中answer[i]是第i个节点的所有祖先,这些祖先节点升序排序。 如果u通过一系列边,能够到达v,那么我们称节点u是节点v的祖先节点。 示例 1: 输入:n =...

weixin_35338624的博客 733

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

网络楼楼通·最小生成树kruskal 克鲁斯卡尔算法

网络楼楼通题目信息输入输出测试样例解答想法最小生成树kruskal克鲁斯卡尔算法基本思想具体做法判断连通 题目信息 现有学校宿舍区之间要铺设光纤建设网络,在施工预算的统计数据表中,列出了有可能建设光缆的若干条管线的成本,求使每栋楼都能够接入校园网且使管网建设费用成本最低。 输入 第一行数据包括楼宇的数目正整数N(≤1000)和候选管网数目M(≤3N); 随后的M行对应M条线路,每行给出3个正整数,分别是该条线路直接连通的两个楼宇的编号以及预算成本(为简单起见,城镇从1到N编号)。 输出 输出建设楼楼通需要的

zhj12399的博客 1572

Vivado新手避坑指南:搞懂Generate Output Products和Create HDL Wrapper到底在干啥

本文深入解析Vivado设计流程中的Generate Output Products和Create HDL Wrapper两大关键步骤,帮助新手理解其核心功能与操作要点。通过详细讲解文件生成类型、关键选项设置及常见问题解决方案,指导开发者正确使用这两个功能,避免设计流程中的常见错误,提高FPGA开发效率。

weixin_29207149的博客 308

burpsuite抓取ios数据包

1:首先在burpsuite中设置 添加proxy listeners 2:电脑开热点,手机连接,把代理设为电脑的ip和代理的端口 3:在Safari浏览器中打开网址http://burp下载证书 4:打开设置->通用->描述文件与设备管理 5:设置->通用->关于本机->证书信任设置 之后就可以正常抓包了 ...

weixin_45682070的博客 2065

1804: 有向无环图

1804: 有向无环图 Time Limit: 5 SecMemory Limit: 128 MBSubmit: 341Solved: 152[Submit][Status][Web Board] Description Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。 为了方便,点用 1,2,…,n...

weixin_30346033的博客 148

AutoSAR系列讲解(入门篇)2.1-AppL概述

该章主要是讲解SWC是如何在ECU中分布的

雪云飞星的博客 4万+

LeetCode-Day108(C++) 1557. 可以到达所有点的最少点数目

可以到达所有点的最少点数目 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 示例 1: 输入:n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] 输出:[0,3] 解释:从单个节点出发无法到达所有节点。从.

weixin_45401129的博客 381

Python 实战:全面解析“微信搜一搜”内容爬取,从入门到企业级架构

本文将带你从零搭建爬虫项目,采用 Requests、Scrapy、Selenium、Proxy 池、中间人监控(如 Fiddler/mitmproxy)、分布式调度、数据库持久化、断点续抓等方案,实现可持续、抗封能力强的内容抓取系统。理解“微信搜一搜”页面结构与 Javascript 渲染逻辑;使用 Scrapy 框架搭建分布式爬虫;使用 Selenium 模拟浏览器抓取;构建代理池提升爬取成功率;对抗验证码、IP 封禁与 cookie 过期问题;

2201_76125261的博客 1392

美特CRM mcc_login.jsp存在SQL注入漏洞

MetaCRM 是一种现代化的客户关系管理(CRM)平台,旨在通过集成和自动化的方式帮助企业管理与客户的关系,提高销售和服务效率。MetaCRM 的功能和特性通常涵盖了多个领域,包括销售、营销、客户服务、数据分析和自动化工具。

缘梦未来的博客 808

Java编程题之——可以到达所有点的最少点数目(某扣)

题目描述: 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 先说说心得:心态炸裂,想着用深搜解决,代码写出来后提交结果是这样的:通过65/66,没错,最后一个用例超时了,直接给我上了100000条数据,我直接炸了,先上深搜的代码: class Sol

qq_45841205的博客 562

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

简单的搜索题目整合

八月五号开始接触了搜索,常见的搜索目前接触到的也就是dfs 个人感觉dfs很不好理解,不好写 ,难点在于深搜,标记,回溯吧。这几天做了一些dfs,bfs的题目,多多少少十多道吧,dfs有数独,找数,棋盘等,bfs就比较多了,大概有最普通的二维,三位迷宫问题,同时对于一些求最短的路径的保存,以及一些特殊问题求最少次数等等这些应该是bfs的题眼了吧,目前接触的bfs中,碰到了个人觉得很恶心的题目,还没...

qq_43949280的博客 1477

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Leetcode刷题篇】- Leetcode可以到达所有点的最少数目

3.Leetcode1557 可以到达所有点的最少数目 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 示例 1: 输入:n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] 输出:[0,3] 解释:从单个节点

Mind_programmonkey的博客 644

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

算法期中——拓扑序[Special judge]

拓扑序[Special judge] 在图论中,拓扑序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列.

Valerie的博客 594

leetcode1557.可以到达所有点的最少点数目

题目大意 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 输入:n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] 输出:[0,3] 解释:从单个节点出发无法到达所有节点。从 0 出发我们可以到达 [0,1,

大腿壮的博客 482

【总结】拓扑排序

拓扑排序算法详解

tanfuwen_的博客 1706

有向无环图中一个节点的所有祖先

题目 给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者)。 给你一个二维整数数组 edges ,其中 edges[i] = [fromi, toi] 表示图中一条从 fromi 到 toi 的单向边。 请你返回一个数组 answer,其中 answer[i]是第 i 个节点的所有 祖先 ,这些祖先节点 升序 排序。 如果 u 通过一系列边,能够到达 v ,那么我们称节点 u 是节点 v 的 祖先 节点。 来源:力扣(LeetCode) 链接:https:

weixin_44218238的博客 617

leetcode 可以到达所有点的最少点数目

1557. 可以到达所有点的最少点数目 给你一个 有向无环图 , n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。 找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。 你可以以任意顺序返回这些节点编号。 示例 1: 输入:n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] 输出:[0,3] 解释:从单个节点出发无法到达所

qq_22684941的博客 454

第 33 场力扣双周赛

复习lc,除了把之前刷过的题看一遍,还要把比较简单的周赛做一做(说是简单,但是对于还没有ak过的我,也不算太简单了) 1. 1556. 千位分隔数 难度简单0 给你一个整数n,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。 示例 1: 输入:n = 987 输出:"987" 示例 2: 输入:n = 1234 输出:"1.234" 示例 3: 输入:n = 123456789 输出:"123.456.789" 示例 4: 输入..

RedemptionC的博客 413

算法期中练习——1004. 拓扑序

算法期中练习——1004. 拓扑序 Description: 在图论中,拓扑序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列. 且该序列必须满足下面两个条件: 1. 每个顶点出现且只出现一次. 2. 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A

My Blog 362
上一篇: 算法分析与设计期中测试——最小和
下一篇: leetcode 712 Minimum ASCII Delete Sum for Two Strings
wenkun97
博客等级 码龄10年 15粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值