文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者)。

给你一个二维整数数组 edges ,其中 edges[i] = [fromi, toi] 表示图中一条从 fromi 到 toi 的单向边

请你返回一个数组 answer,其中 answer[i]是第 i 个节点的所有 祖先 ,这些祖先节点 升序 排序。

如果 u 通过一系列边,能够到达 v ,那么我们称节点 u 是节点 v 的 祖先 节点。

示例 1:

输入:n = 8, edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3,6],[3,7],[4,6]]
输出:[[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1,2,3]]
解释:
上图为输入所对应的图。
- 节点 0 ,1 和 2 没有任何祖先。
- 节点 3 有 2 个祖先 0 和 1 。
- 节点 4 有 2 个祖先 0 和 2 。
- 节点 5 有 3 个祖先 0 ,1 和 3 。
- 节点 6 有 5 个祖先 0 ,1 ,2 ,3 和 4 。
- 节点 7 有 4 个祖先 0 ,1 ,2 和 3 。

示例 2:

输入:n = 5, edgeList = [[0,1],[0,2],[0,3],[0,4],[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
输出:[[],[0],[0,1],[0,1,2],[0,1,2,3]]
解释:
上图为输入所对应的图。
- 节点 0 没有任何祖先。
- 节点 1 有 1 个祖先 0 。
- 节点 2 有 2 个祖先 0 和 1 。
- 节点 3 有 3 个祖先 0 ,1 和 2 。
- 节点 4 有 4 个祖先 0 ,1 ,2 和 3 。提示:
1 <= n <= 1000
0 <= edges.length <= min(2000, n * (n - 1) / 2)
edges[i].length == 2
0 <= fromi, toi <= n - 1
fromi != toi
图中不会有重边。
图是 有向 且 无环 的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-ancestors-of-a-node-in-a-directed-acyclic-graph
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 拓扑排序的思路
  • 建图,入度计数,从入度为 0 的开始遍历
class Solution {public:vector<vector<int>> getAncestors(int n, vector<vector<int>>& edges) {vector<set<int>> ancest(n);vector<int> indegree(n);vector<unordered_set<int>> g(n);for(auto& e : edges){g[e[0]].insert(e[1]);//建图indegree[e[1]]++;//入度}queue<int> q;for(int i = 0; i < n; ++i){if(indegree[i] == 0)q.push(i);//入度为0加入队列}while(!q.empty()){int id = q.front();q.pop();for(auto nid : g[id]){for(auto a : ancest[id]){ancest[nid].insert(a);//继承之前节点的祖先}ancest[nid].insert(id);//加入from节点为祖先if(--indegree[nid] == 0)q.push(nid);}}vector<vector<int>> ans(n);for(int i = 0; i < n; ++i){ans[i] = vector<int>(ancest[i].begin(), ancest[i].end());//转化为答案}return ans;}
};

492 ms 140.6 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2192. 有向无环图中一个节点的所有祖先(拓扑排序)相关推荐

  1. 2192. 有向无环图中一个节点的所有祖先(邻接表 加 拓扑排序)

    如果直接使用邻接表不记录已经遍历过的数,暴力搜索超超时,所以需要拓扑排序来记录入度为0的点,入度为0时,他之前的父节点已经记录完毕,可以直接加入到他的子节点中. 最后还需要转换结果,从小到大,直接用s ...

  2. 有向无环图中的拓扑排序

    ´有向无环图(DAG),指不存在环的有向图 ´点的入度,指以这个点为结束点的边数 ´点的出度,指以这个点为出发点的边数 ´拓扑序就是对于节点的一个排列使得若(u,v)∈E,那么u在排列中出现的位置一定 ...

  3. 获得有向无环图中起点到终点的所有路径_力扣1514——概率最大的路径

    本题主要和图的遍历求解最短路径相关,可以用 Dijkstra 或者 Bellman-Ford 算法进行解决. 原题 给你一个由 n 个节点(下标从 0 开始)组成的无向加权图,该图由一个描述边的列表组 ...

  4. 有向无环图的最短路径求解算法

    对于最短路径问题,Dijkstra算法只能求解所有边的权值都是非负的加权有向图,而Bellman-Ford算法虽然可以求解有负权值边的图的最短路径,但效率并不高.对于有向无环图,下面这种基于Dijks ...

  5. java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

  6. 【数据挖掘】贝叶斯信念网络 ( 马尔科夫假设 | 结构 | 有向无环图 | 参数 | 条件概率表 | 案例分析 )

    文章目录 I . 贝叶斯信念网络 II . 马尔科夫假设 III . 贝叶斯信念网络 示例 1 IV . 贝叶斯信念网络 示例 2 V . 贝叶斯信念网络 联合概率分布计算 VI . 贝叶斯信念网络 ...

  7. 因果系列文章(3)——有向无环图

    Pearl教授被称为"贝叶斯网络之父",足以显示他对贝叶斯网络研究的贡献(虽然他好像并不是贝叶斯网络的最初提出者).但正如他自己所说,他曾经一度认为贝叶斯网络是开启人工智能大门的金 ...

  8. 笔记:深度学习与有向无环图SVM结合用于年龄估计的局部调整

    阅读论文:Combined Deep Learning With Directed Acyclic Graph SVM for Local Adjustment of Age Estimation | ...

  9. 有向无环图(DAG)的温故知新

    当我们学习数据结构的时候,总是觉得很枯燥,而当我们解决实际问题的时候,又往往因为对数据结构了解的匮乏而束手无策.从问题中来,到问题中去,在某一点上的深入思考并且不断的实践积累,或许是个笨办法,但笨办法 ...

最新文章

  1. Java Socket编程 - 基于TCP方式的二进制文件传输
  2. 全方位讲解硬件防火墙的选择
  3. Element UI格式化日期
  4. linux下exec系列(一)
  5. NPM使用前设置和升级
  6. ios7学习之路六(隐藏状态栏 )
  7. 【机器学习】端到端机器学习实践
  8. 谈谈对margin的理解
  9. java web 调度_javaweb车辆调度信息管理平台
  10. Oracle-数据库
  11. lua redisson执行lua脚本
  12. python自动发微信朋友圈不带图片_python itchat实现微信自动检测违规涉黄图片
  13. 芯片数据手册下载和阅读
  14. RGL: A Simple yet Effective Relation.. 文章详解
  15. MBR 与 GPT - 分区时要知道的事情
  16. 区块链性能测试工具Hyperbench详解
  17. Cobalt Strike远控木马分析
  18. 运维大佬嘲笑我,这个你都不知道?
  19. 树莓派Web登录校园网WIFI热点DJTU
  20. Windows——在设备和驱动器界面删除天翼云盘图标的方法

热门文章

  1. Python 第三方模块之 matplotlib - 绘图库
  2. Docker 精通之入门
  3. pojo类中list存储其他字段_List集合流处理类型小结
  4. Source Insight上手教程
  5. VS2017 安装 QT5.9
  6. 数据结构:神奇的B树实现解析(有图有代码有真相!!!)
  7. php开启错误日志,PHP开启error_log 错误日志
  8. web存储机制localStorage和sessionStorage
  9. checkbox保存和赋值
  10. draw graph