2022-06-03:a -> b,代表a在食物链中被b捕食,
给定一个有向无环图,返回这个图中从最初级动物到最顶级捕食者的食物链有几条。
来自理想汽车。

答案2022-06-03:

拓扑排序。

代码用rust编写。代码如下:

  1. fn main() {
  2. let sc: Vec<i32> = vec![5, 7, 1, 2, 1, 3, 2, 3, 3, 5, 2, 5, 4, 5, 3, 4];
  3. let mut ii: i32 = 0;
  4. while ii < sc.len() as i32 {
  5. let mut info = GlobalInfo::new();
  6. info.n = sc[ii as usize];
  7. ii += 1;
  8. let m: i32 = sc[ii as usize];
  9. ii += 1;
  10. let mut pre_edge: Vec<i32> = vec![];
  11. let mut edges_to: Vec<i32> = vec![];
  12. for _ in 0..m + 1 {
  13. pre_edge.push(0);
  14. edges_to.push(0);
  15. }
  16. for i in 1..=m {
  17. let from = sc[ii as usize];
  18. ii += 1;
  19. let to = sc[ii as usize];
  20. ii += 1;
  21. edges_to[i as usize] = to;
  22. pre_edge[i as usize] = info.head_edge[from as usize];
  23. info.head_edge[from as usize] = i;
  24. info.out0[from as usize] = true;
  25. info.in0[to as usize] += 1;
  26. }
  27. let ans = how_many_ways(&mut pre_edge, &mut edges_to, &mut info);
  28. println!("ans = {}", ans);
  29. }
  30. }
  31. pub struct GlobalInfo {
  32. in0: Vec<i32>,
  33. out0: Vec<bool>,
  34. lines: Vec<i32>,
  35. head_edge: Vec<i32>,
  36. queue: Vec<i32>,
  37. mod0: i32,
  38. n: i32,
  39. }
  40. impl GlobalInfo {
  41. pub fn new() -> Self {
  42. let mut in0: Vec<i32> = vec![];
  43. let mut out0: Vec<bool> = vec![];
  44. let mut lines: Vec<i32> = vec![];
  45. let mut head_edge: Vec<i32> = vec![];
  46. let mut queue: Vec<i32> = vec![];
  47. let mod0: i32 = 80112002;
  48. let n: i32 = 0;
  49. for _i in 0..5001 {
  50. in0.push(0);
  51. out0.push(false);
  52. lines.push(0);
  53. head_edge.push(0);
  54. queue.push(0);
  55. }
  56. Self {
  57. in0,
  58. out0,
  59. lines,
  60. head_edge,
  61. queue,
  62. mod0,
  63. n,
  64. }
  65. }
  66. }
  67. fn how_many_ways(pre_edge: &mut Vec<i32>, edges_to: &mut Vec<i32>, info: &mut GlobalInfo) -> i32 {
  68. let mut ql = 0;
  69. let mut qr = 0;
  70. for i in 1..info.n {
  71. if info.in0[i as usize] == 0 {
  72. info.queue[qr as usize] = i;
  73. qr += 1;
  74. info.lines[i as usize] = 1;
  75. }
  76. }
  77. while ql < qr {
  78. let cur = info.queue[ql];
  79. ql += 1;
  80. let mut edge = info.head_edge[cur as usize];
  81. while edge != 0 {
  82. let next = edges_to[edge as usize];
  83. info.lines[next as usize] =
  84. (info.lines[next as usize] + info.lines[cur as usize]) % info.mod0;
  85. info.in0[next as usize] -= 1;
  86. if info.in0[next as usize] == 0 {
  87. info.queue[qr] = next;
  88. qr += 1;
  89. }
  90. edge = pre_edge[edge as usize];
  91. }
  92. }
  93. let mut ans = 0;
  94. for i in 1..=info.n {
  95. if !info.out0[i as usize] {
  96. ans = (ans + info.lines[i as usize]) % info.mod0;
  97. }
  98. }
  99. return ans;
  100. }

执行结果如下:


左神java代码

2022-06-03:a -> b,代表a在食物链中被b捕食, 给定一个有向无环图,返回这个图中从最初级动物到最顶级捕食者的食物链有几条。 来自理想汽车。的更多相关文章

  1. JuiceFS 在理想汽车的使用和展望

    理想汽车是中国新能源汽车制造商,设计.研发.制造和销售豪华智能电动汽车,于 2015 年 7 月创立,总部位于北京,已投产的自有生产基地位于江苏常州,通过产品创新及技术研发,为家庭用户提供安全及便捷的 ...

  2. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  3. 25条来自 Google 的移动网站设计准则

    越来越的用于通过移动设备访问网络,因此对于企业来说,现在比以往任何时候都更需要一个移动网站.但是,怎么样才能制作一个优秀的移动网站呢? 为了回答这个问题,Google 与 AnswerLab 合作,研 ...

  4. android 1.6 launcher研究之自定义ViewGroup (转 2011.06.03(二)——— android 1.6 launcher研究之自定义ViewGroup )

    2011.06.03(2)——— android 1.6 launcher研究之自定义ViewGroup2011.06.03(2)——— android 1.6 launcher研究之自定义ViewG ...

  5. 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...

  6. 06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图

    1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsiz ...

  7. 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?

    如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...

  8. 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...

  9. 纯css使用线性渐变实现滚动进度条(来自于微信前端早读课)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

随机推荐

  1. Oracle-登录的用户名和密码大小写敏感

    Oracle-登录的用户名和密码大小写敏感

  2. C++ accumulate()函数的用法

    accumulate定义在 numeric 中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理. 头文件 #include <numeric> 原型 默认求累加和 templat ...

  3. python-if、while、for语句的练习

    简单练习 1. 根据百分制成绩打印及格和不及格,60分一下不及格 source = float(input('请输入您的成绩:')) if 0 <= source < 60: print( ...

  4. Android笔记--报错AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY in "create table if not exists user_info(导致APP闪退)

    问题描述 每次一运行,APP程序必定闪退,百度了发现,闪退问题绝大多数就跟sql语句有关: 看到控制台报出这样的错误: 百度发现,我忘记了最初的知识点: 在表里面,自动递增是在数据类型为Integer ...

  5. Day04笔记

    01.explicit的作用(了解) class Maker { public: //explicit只能放在构造函数前面,构造函数只有一个参数或其他参数有默认值时 explicit Maker(in ...

  6. 从头开始——重新布置渗透测试环境的过程记录(From Windows To Mac)

    因为疫情和工作的原因,2022年整整一年我基本没有深度参与过网络安全和渗透测试相关的工作. 背景:之前因为使用习惯,一直使用的是ThinkPad X1 Extreme,可联想的品控实在拉胯,奈何Thi ...

  7. ChatGPT 何许人也

    有时候会想,如果chatGPT是人,它会是一个怎样的人呢?下面是我的推测过程. 首先,她应该是女人 会推测而不会计算 你问它: 3457 * 43216 = ,它回答 149261912 (这是错的. ...

  8. Hadoop 安装及目录结构

    一.准备工作 [1]创建用户:useradd 用户名[2]配置创建的用户具有 root权限,修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:(注意:需要先给sud ...

  9. 【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

    摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 单SQL磁盘空间管控>,作者: 譡里个檔. [问题描述] ...

  10. 【Avalonia】【跨平台】关于控件阴影简单用法

    背景 当我们在用Avalonia开发项目时,我们可能会对控件添加一些阴影效果,改善用户体验,我们开发WPF的人知道,WPF会给我提供Effect这么一个属性,这是方便我们进行阴影以及特效使用,但是Av ...