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

答案2022-06-03:

拓扑排序。

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

fn main() {
let sc: Vec<i32> = vec![5, 7, 1, 2, 1, 3, 2, 3, 3, 5, 2, 5, 4, 5, 3, 4];
let mut ii: i32 = 0;
while ii < sc.len() as i32 {
let mut info = GlobalInfo::new();
info.n = sc[ii as usize];
ii += 1;
let m: i32 = sc[ii as usize];
ii += 1;
let mut pre_edge: Vec<i32> = vec![];
let mut edges_to: Vec<i32> = vec![];
for _ in 0..m + 1 {
pre_edge.push(0);
edges_to.push(0);
}
for i in 1..=m {
let from = sc[ii as usize];
ii += 1;
let to = sc[ii as usize];
ii += 1;
edges_to[i as usize] = to;
pre_edge[i as usize] = info.head_edge[from as usize];
info.head_edge[from as usize] = i;
info.out0[from as usize] = true;
info.in0[to as usize] += 1;
}
let ans = how_many_ways(&mut pre_edge, &mut edges_to, &mut info);
println!("ans = {}", ans);
}
} pub struct GlobalInfo {
in0: Vec<i32>,
out0: Vec<bool>,
lines: Vec<i32>,
head_edge: Vec<i32>,
queue: Vec<i32>,
mod0: i32,
n: i32,
} impl GlobalInfo {
pub fn new() -> Self {
let mut in0: Vec<i32> = vec![];
let mut out0: Vec<bool> = vec![];
let mut lines: Vec<i32> = vec![];
let mut head_edge: Vec<i32> = vec![];
let mut queue: Vec<i32> = vec![];
let mod0: i32 = 80112002;
let n: i32 = 0;
for _i in 0..5001 {
in0.push(0);
out0.push(false);
lines.push(0);
head_edge.push(0);
queue.push(0);
}
Self {
in0,
out0,
lines,
head_edge,
queue,
mod0,
n,
}
}
} fn how_many_ways(pre_edge: &mut Vec<i32>, edges_to: &mut Vec<i32>, info: &mut GlobalInfo) -> i32 {
let mut ql = 0;
let mut qr = 0;
for i in 1..info.n {
if info.in0[i as usize] == 0 {
info.queue[qr as usize] = i;
qr += 1;
info.lines[i as usize] = 1;
}
}
while ql < qr {
let cur = info.queue[ql];
ql += 1;
let mut edge = info.head_edge[cur as usize];
while edge != 0 {
let next = edges_to[edge as usize];
info.lines[next as usize] =
(info.lines[next as usize] + info.lines[cur as usize]) % info.mod0;
info.in0[next as usize] -= 1;
if info.in0[next as usize] == 0 {
info.queue[qr] = next;
qr += 1;
}
edge = pre_edge[edge as usize];
}
}
let mut ans = 0;
for i in 1..=info.n {
if !info.out0[i as usize] {
ans = (ans + info.lines[i as usize]) % info.mod0;
}
}
return ans;
}

执行结果如下:


左神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. 视频播放-videojs

    视频播放-video-js组件 安装 yarn add video.js --save npm install video.js --save 代码 import React, { useEffect ...

  2. vlan概述

    一.vlan是什么? vlan顾名思义就是虚拟局域网Virtual Local Area Network,为什么要划分vlan?划分vlan可以控制广播,增强网络安全性,简化网络管理. 二.vlan的 ...

  3. 一篇博客带你学会MyBatis

    概念 MyBatis是一款持久层框架,用于简化JDBC操作(JavaEE三层架构:表现层(用来做页面的代码),业务层(业务逻辑代码),持久层(对数据库操作的代码))(框架就是一个半成品软件,是一套可重 ...

  4. 声网教育aPaaS 产品灵动课堂:「低代码」开发,15分钟极速上线

    1 月 20 日,声网Agora 在官网正式发布教育行业首款 aPaaS 产品灵动课堂,帮助教育机构和开发者最快 15 分钟上线自有品牌.全功能的在线互动教学平台,节省 90% 开发时间.目前,声网面 ...

  5. Windows 系统下怎么获取 UDP 本机地址

    Windows 系统下怎么获取 UDP 本机地址 我们知道 UDP 获取远端地址非常简单,通常接口 recvfrom 就可以直接获取到远端的地址和端口:如果获取 UDP 的本机地址就需要点特殊处理了, ...

  6. IconJar - Mac 上的一款多功能图标素材管理工具

    IconJar 是一个多功能的图标管理工具,由世界各地的设计师和开发人员使用.在一个应用程序中搜索.组织.预览和检索图标,而不是创建大量的文件夹来存储你的收藏.这款应用针对黑暗模式进行了优化,并支持S ...

  7. 学习httprunner遇到的问题记录

    今天研究httprunner遇到了几个问题 1.问题1: 最新的版本4.3.0已经舍弃了locusts,har2case这两个东西 导致运行的时候,出现har2case不是内部命令 一开始以为是没有配 ...

  8. tidyr包几个函数的用法

    在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...

  9. pyhon之编译成exe

    1安装pyinstaller pip install pyinstaller 2 编译 pyinstaller -F -w game.py  (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框 ...

  10. 【LeetCode回溯算法#extra01】集合划分问题【火柴拼正方形、划分k个相等子集、公平发饼干】

    火柴拼正方形 https://leetcode.cn/problems/matchsticks-to-square/ 你将得到一个整数数组 matchsticks ,其中 matchsticks[i] ...