2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号
它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群
其中连接 connections 是无向的
从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接
任何服务器都可以直接或者间接地通过网络到达任何其他服务器。
“关键连接"是在该集群中的重要连接,也就是说,假如我们将它移除
便会导致某些服务器无法访问其他服务器。
请你以任意顺序返回该集群内的所有"关键连接”。
输入:n = 4, connections = [[0,1],[1,2],[2,0],[1,3]],
输出:[[1,3]],
解释:[[3,1]] 也是正确的。

答案2023-02-13:

力扣1192。
tarjan算法。

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

use std::iter::repeat;
fn main() {
let n = 4;
let connections: Vec<Vec<i32>> = vec![vec![0, 1], vec![1, 2], vec![2, 0], vec![1, 3]];
let ans = unsafe { Solution::critical_connections(n, connections) };
println!("ans = {:?}", ans);
} static mut DFN: [i32; 100010] = [0; 100010];
static mut LOW: [i32; 100010] = [0; 100010];
static mut DFN_CNT: i32 = 0;
struct Solution {}
impl Solution {
pub unsafe fn critical_connections(n: i32, connections: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut graph: Vec<Vec<i32>> = repeat(vec![]).take(n as usize).collect();
for edge in connections.iter() {
graph[edge[0] as usize].push(edge[1]);
graph[edge[1] as usize].push(edge[0]);
}
for i in 0..n {
DFN[i as usize] = 0;
LOW[i as usize] = 0;
} DFN_CNT = 0;
let mut ans: Vec<Vec<i32>> = vec![];
Solution::tarjan(0, -1, &mut graph, &mut ans);
return ans;
} // tarjan dfs过程
// 点的编号是cur,dfn X low X
unsafe fn tarjan(cur: i32, father: i32, graph: &mut Vec<Vec<i32>>, ans: &mut Vec<Vec<i32>>) {
// 第一次来到cur
// 分配dfn、low序号
DFN_CNT += 1;
LOW[cur as usize] = DFN_CNT;
DFN[cur as usize] = LOW[cur as usize];
let n = graph[cur as usize].len() as i32;
for j in 0..n {
let next = graph[cur as usize][j as usize];
if next != father {
if DFN[next as usize] == 0 {
// 下级的节点没跑过,就去跑
Solution::tarjan(next, cur, graph, ans);
LOW[cur as usize] = get_min(LOW[cur as usize], LOW[next as usize]);
} else {
// 下级的节点跑过了,直接更新low
LOW[cur as usize] = get_min(LOW[cur as usize], DFN[next as usize]);
}
}
}
if LOW[cur as usize] == DFN[cur as usize] && cur != 0 {
ans.push(vec![father, cur]);
}
}
} fn get_min<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a < b {
a
} else {
b
}
}

2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是的更多相关文章

  1. 手把手教你用Docker部署一个MongoDB集群

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 ...

  2. Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群

    前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...

  3. kubeadm部署一个Kubernetes集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具.这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm in ...

  4. 第3章:快速部署一个Kubernetes集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点$ kubeadm in ...

  5. Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行

    假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行jobquartz集群,会 ...

  6. 手把手教你搭建一个Elasticsearch集群

    一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个 ...

  7. [k8s]简单启动一个k8s集群

    简单启动一个k8s集群 kube-master mkdir -p /root/logs/api-audit /root/logs/controller /root/logs/scheduler kub ...

  8. 手把手教你如何利用 HeroKu 免费获取一个 Scrapyd 集群

    手把手教你如何利用 HeroKu 免费获取一个 Scrapyd 集群 本文原始地址:https://sitoi.cn/posts/48724.html 准备环境 一个 GitHub 的账号 一个 He ...

  9. 手把手教你搭建一个 Elasticsearch 集群

    为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎, ...

  10. 用kubeadm+dashboard部署一个k8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

随机推荐

  1. 1--我们写了一个java类,那么生成一个对象占用多大的内存?

    public class Student { private long id; private long userId; private byte state; private long create ...

  2. 共享USB打印机设置方法

    打印机共享 一.准备 所有计算机在同一个网段. 所有计算机在同一个工作组,组名可以自定义,默认WORKGROUP. 使用超级管理员用户,目的是为了激活guest用户.验证之后可以不需要此前提. 二.主 ...

  3. struts 1.x框架记录

    strus-config.xml 项目目录最顶层建立配置文件strus-config.xml action 通过type绑定java类,可通过attribute被引用 MyLoginForm.java ...

  4. Nacos与OpenFeign开发

    目录 1.前言 2.生产者 3.消费者 4.扩展 1.前言 我的话是微服务B调用微服务A的controller层 2.生产者 微服务A请求接口如下: @GetMapping("/listUn ...

  5. vuex相关笔记

    vuex是什么? vuex是管理应用程序状态,实现组件间通信的. 为什么使用vuex? 在开发大型应用的项目时,会出现多个视图组件依赖一个同一个状态,来自不同视图的行为需要变更同一个状态. 在遇到以上 ...

  6. JVM加载中初始化时机?什么时候不会进行初始化?

    初始化的过程是给静态变量赋予指定值以及执行静态代码块的过程. 当遇到new,getstatic,putstatic,invokestatic指令时要进行初始化,也就是new实例化对象,调用静态变量以及 ...

  7. 传输层和网络层的checksum区别,TCP cksum为何包含伪首部

    一直搞不清传输层和网络层的校验和为什么校验内容不一样,最近问了一些前辈,找寻了一些答案,总结一下自己的思考. 先说一下传输层(TCP)和网络层(IP)的校验和: TCP校验和有伪首部.TCP herd ...

  8. 重磅!AWS升级对Apache Hudi的集成

    全球最大云厂商AWS的 Athena 团队又更新了 Athena 与 Apache Hudi 的集成,以支持新功能及最新的 0.8.0 社区版本.早在Apache Hudi还处于孵化阶段时,AWS A ...

  9. 系统优化脚本支持Ubuntu和CentOS

    系统优化脚本支持Ubuntu和CentOS 经常会部署各种用途的操作系统,但在这些工作中,我们会发现很多工作其实是重复性的劳动,操作的内容也是大同小异,基于这类情况,我们可以把相同的操作做成统一执行的 ...

  10. pysimplegui之运行多个窗口

    运行多个窗口 这就是 PySimpleGUI 继续简单的地方,但问题空间刚刚进入"复杂"领域. 如果您希望在事件循环中运行多个窗口,那么有两种方法可以做到这一点. 当第二个窗口可见 ...