LeetCode:1466. 重新规划路线(DFS C++、Java)

news/2024/7/20 20:35:25 标签: leetcode, 深度优先, c++

目录

1466. 重新规划路线

题目描述:

实现代码与解析:

DFS

原理思路:


1466. 重新规划路线

题目描述:

   n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。

路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。

今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。

请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。

题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。

示例 1:

输入:n = 6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]]
输出:3
解释:更改以红色显示的路线的方向,使每个城市都可以到达城市 0 。

示例 2:

输入:n = 5, connections = [[1,0],[1,2],[3,2],[3,4]]
输出:2
解释:更改以红色显示的路线的方向,使每个城市都可以到达城市 0 。

示例 3:

输入:n = 3, connections = [[1,0],[2,0]]
输出:0

提示:

  • 2 <= n <= 5 * 10^4
  • connections.length == n-1
  • connections[i].length == 2
  • 0 <= connections[i][0], connections[i][1] <= n-1
  • connections[i][0] != connections[i][1]

实现代码与解析:

DFS

C++

class Solution {
public:
    int N = 5 * 10000 +  10;
    vector<int> e = vector<int>(N * 2, 0), ne = vector<int>(N * 2, 0), h = vector<int>(N, -1), d = vector<int>(N * 2, 0);
    int idx = 0;
    int res = 0;
    void add(int a, int b) {
        e[idx] = b; ne[idx] = h[a]; h[a] = idx++;
    }

    void dfs(int cur, int p) {
        
        for (int i = h[cur]; ~i; i = ne[i]) {
            int j = e[i];
            if (j == p) continue;
            if (d[i] == 1) res++;
            dfs(j, cur);
        }
    }
    int minReorder(int n, vector<vector<int>>& connections) {

        for (auto t: connections) {
            d[idx] = 1; 
            add(t[0], t[1]);
            add(t[1], t[0]);
        }
        dfs(0, -1);
        return res;
    }
};

Java

class Solution {
    public int N = 5 * 10000 + 10;
    public int[] e = new int[N * 2], ne = new int[N * 2], h = new int[N], d = new int[N * 2];
    public int idx = 0;
    public int res = 0;
    void add(int a, int b) {
        e[idx] = b; ne[idx] = h[a]; h[a] = idx++;
    }

    void dfs(int cur, int p) {

        for (int i = h[cur]; i != -1; i = ne[i]) {
            int j = e[i];
            if (j == p) continue;
            if (d[i] == 1) res++;
            dfs(j, cur);
        }
    }
    public int minReorder(int n, int[][] connections) {

        Arrays.fill(h, -1);
        Arrays.fill(d, 0);
        for (int[] t: connections) {
            d[idx] = 1;
            add(t[0], t[1]);
            add(t[1], t[0]);
        }

        dfs(0, -1);
        return res;
    }
}

原理思路:

        深度优先遍历,在存入边时,存入双向边,在d数组中记录真实是正向还是反向,然后从0开始dfs,遇到真实是正向边的,说明此边需要反转,res++。得到结果。


http://www.niftyadmin.cn/n/5244782.html

相关文章

JAVA网络编程——BIO、NIO、AIO深度解析

I/O 一直是很多Java同学难以理解的一个知识点&#xff0c;这篇帖子将会从底层原理上带你理解I/O&#xff0c;让你看清I/O相关问题的本质。 1、I/O的概念 I/O 的全称是Input/Output。虽常谈及I/O&#xff0c;但想必你也一时不能给出一个完整的定义。搜索了谷哥欠&#xff0c;发…

内外网文件交换系统:解决跨网文件传输难题,推动企业高效协作

在如今这个数字化时代&#xff0c;数据的流通与共享已经成为了企业和团队之间日常运营的关键环节。然而&#xff0c;内外网之间的文件传输经常会给企业和团队带来一系列的困扰。传统的文件传输方式往往受到网络环境、安全性、传输效率和管理成本等因素的限制。 1、网络环境复杂…

Stable Diffusion Automatic1111 Web UI和dreambooth扩展的安装教程

一 下载安装 Python 3.10.x (3.10.6, 3.10.9, 3.10.11) and git Python 3.10.9 > https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exegit > https://git-scm.com/downloads 二 下载安装Automatic1111 Web UI 下载地址&#xff1a;https://github.com/…

大语言模型Prompt设计学习记录:Magic words(魔法词)的作用

文章目录 “扮演”或“成为”类指令&#xff1a;“总结”或“概述”类指令&#xff1a;“比较”或“对比”类指令&#xff1a;“解释”或“定义”类指令&#xff1a;“继续”或“接下来”类指令&#xff1a;“转换”或“改写”类指令&#xff1a; 在大语言模型中&#xff0c;Ma…

加密系统,您的数据安全守护者,助您远离泄露风险!

随着云计算、大数据等技术的快速发展&#xff0c;企业在技术升级&#xff0c;业务上云的同时&#xff0c;也面临着来自互联网的各类安全威胁&#xff0c;并且导致数据信息的泄露。企业数据安全问题几乎为新时代人的焦虑又添上了一把火&#xff0c;面对形形色色的网络攻击手段&a…

FastAPI请求体-多个参数

路径参数、查询参数&#xff0c;和请求体混合 首先&#xff0c;我们需要导入所需的库。我们将使用FastAPI、Path和Annotated来处理路由和参数&#xff0c;并使用BaseModel和Union来自定义数据模型。 完整示例代码 from typing import Annotated, Unionfrom fastapi import F…

04 ECharts基础入门

文章目录 一、ECharts介绍1. 简介2. 相关网站3. HTML引入方式4. 基本概念 二、常见图表1. 柱状图2. 折线图3. 饼图4. 雷达图5. 地图 三、应用1. 动画2. 交互 一、ECharts介绍 1. 简介 ECharts是一个使用JavaScript实现的开源可视化库&#xff0c;用于生成各种图表和图形。 EC…

C++学习笔记之五(String类)

C 前言getlinelength, sizec_strappend, inserterasefindsubstrisspace, isdigit 前言 C是兼容C语言的&#xff0c;所以C的字符串自然继承C语言的一切字符串&#xff0c;但它也衍生出属于自己的字符串类&#xff0c;即String类。String更像是一个容器&#xff0c;但它与容器还…