Leetcode 1857. 有向图中最大颜色值

1.题目基本信息

1.1.题目描述

给你一个 有向图 ,它含有 n 个节点和 m 条边。节点编号从 0 到 n – 1 。

给你一个字符串 colors ,其中 colors[i] 是小写英文字母,表示图中第 i 个节点的 颜色 (下标从 0 开始)。同时给你一个二维数组 edges ,其中 edges[j] = [a_j, b_j] 表示从节点 a_j 到节点 b_j 有一条 有向边 。

图中一条有效 路径 是一个点序列 x_1 -> x_2 -> x_3 -> … -> x_k ,对于所有 1 <= i < k ,从 x_i 到 x_i+1 在图中有一条有向边。路径的 颜色值 是路径中 出现次数最多 颜色的节点数目。

请你返回给定图中有效路径里面的 最大颜色值 。如果图中含有环,请返回 -1 。

1.2.题目地址

https://leetcode.cn/problems/largest-color-value-in-a-directed-graph/description/

2.解题方法

2.1.解题思路

拓扑排序+动态规划

2.2.解题步骤

第一步,状态构建;dp[i][j]为以i节点结尾的路径的颜色j的最大数量

第二步,构建邻接表和入度表(注意初始化图,边并不一定会包括所有的节点)

第三步,先获取拓扑排序,再在过程中进行状态转移;同时获取拓扑排序的长度,用来判断有无环

  • 其中,状态转移方程:dp[i][j]=max([dp[node][j]+nodeIIsJColor(j) for node in prev(i)])
  • 如果拓扑排序的长度不等于总节点个数,则有环,直接返回-1

最终状态dp中的最大值即为最终的结果

3.解题代码

Python代码

from collections import defaultdict,deque

class Solution:
    def largestPathValue(self, colors: str, edges: List[List[int]]) -> int:
        length=len(colors)
        # 第一步,状态构建;dp[i][j]为以i节点结尾的路径的颜色j的最大数量
        dp=[[0]*26 for _ in range(length)]
        # 第二步,构建邻接表和入度表(注意初始化图,边并不一定会包括所有的节点)
        graph={i:[] for i in range(length)}
        inDegrees=defaultdict(int)
        for from_,to_ in edges:
            graph[from_].append(to_)
            inDegrees[to_]+=1
        # 第三步,先获取拓扑排序,再在过程中进行状态转移;同时获取拓扑排序的长度,用来判断有无环
        # 其中,状态转移方程:dp[i][j]=max([dp[node][j]+nodeIIsJColor(j) for node in prev(i)])
        topuSortArrLength=0
        que=deque()
        for node in graph.keys():
            if inDegrees[node]==0:
                que.append(node)
        while que:
            node=que.popleft()
            topuSortArrLength+=1
            dp[node][ord(colors[node])-ord('a')]+=1 # 将当前node的颜色添加到状态数组中
            for subNode in graph[node]:
                inDegrees[subNode]-=1
                for i in range(26): # 更新子节点的每一种颜色状态
                    dp[subNode][i]=max(dp[subNode][i],dp[node][i])
                if inDegrees[subNode]==0:
                    que.append(subNode)
        # 如果拓扑排序的长度不等于总节点个数,则有环,直接返回-1
        if topuSortArrLength!=length:
            return -1
        # print(dp)
        # 最终状态中的最大值即为最终的结果
        return max([max(t) for t in dp])

4.执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费版视频压缩软件:让视频处理更便捷

现在不少人已经习惯通过视频来记录生活、传播信息和进行娱乐的重要方式。但是由于设备大家现在录制的文件都会比较大&#xff0c;这时候就比较需要一些缩小视频的工具了。今天我们一起来探讨视频压缩软件免费版来为我们带来的生动世界。 1.Foxit视频压缩大师 链接直达&#x…

《深度学习》【项目】自然语言处理——情感分析 <上>

目录 一、项目介绍 1、项目任务 2、评论信息内容 3、待思考问题 1&#xff09;目标 2&#xff09;输入字词格式 3&#xff09;每一次传入的词/字的个数是否就是评论的长度 4&#xff09;一条评论如果超过32个词/字怎么处理&#xff1f; 5&#xff09;一条评论如果…

[每周一更]-(第119期):“BP”大揭秘:生物学与金融学中的微小单位竟有如此大不同!

最近&#xff08;2024.09.29&#xff09;央行要把存量房贷在LPR&#xff08;贷款市场报价利率&#xff09;基础上&#xff0c;降低30BP&#xff0c;刚好基因行业内&#xff0c;也有bp的概念&#xff0c;通过发音无法区分&#xff0c;以下就讲解下生物学的bp和金融学的BP的概念的…

【汇编语言】寄存器(内存访问)(三)—— 字的传送

文章目录 前言1. 字的传送2. 问题一3. 问题一的分析与解答4. 问题二5. 问题二的分析与解答结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言…

Linuxtop命令查看CPU、内存使用率、解释

1. top 命令 top 是最常用的实时监控工具之一&#xff0c;可以显示 CPU 的总利用率以及各个进程的 CPU 使用情况。在Linux命令行直接输入top即可查看动态原始数据 top 在 top 命令的输出中&#xff0c;最上面的一行会显示 CPU 的使用情况&#xff1a; us&#xff08;User&a…

day01-Qt5入门

day01-Qt5入门 1.下载Qtcreate 官网地址&#xff1a;http://qt-project.org/downloads 2.配置环境变量 将类似于 D:\Qt\Qt5.1.1\5.1.1\mingw48_32\bin 的目录添加到环境变量中 3.创建一个新项目 输入自己的项目名称&#xff0c;后面默认下一部 4.运行第一个项目 在窗口…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…

Windows环境apache控制台命令行启动、停止、重启httpd服务

Windows环境apache控制台命令行启动、停止、重启httpd服务 启动&#xff1a;httpd -k start 重启&#xff1a;httpd -k restart 停止&#xff1a;httpd -k stop 需指定服务的名称&#xff1a;后面各自加上 -n 服务名 例如&#xff1a;启动指定服务的名称 httpd -k start -n 服务…

LDR6500协议芯片:诱骗取电协议,OTG数据同时实现功能芯片

在当前的电子设备市场中&#xff0c;随着USB Type-C接口的广泛应用&#xff0c;用户对充电和数据传输的需求日益提升。为了满足这一需求&#xff0c;乐得瑞科技凭借其深厚的技术积累和创新能力&#xff0c;推出了LDR6500——一款专为USB Type-C Bridge设备设计的USB PD&#xf…

CVE-2024-30269 DataEase配置信息泄露

文章目录 免责声明漏洞描述fofa影响版本漏洞复现nuclei修复建议 免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 DataEase是一个开源的数据可视化分析工具&#xff0c;可以连接…

IPv6 DNS简介

IPv6网络中的每台主机都是由IPv6地址来标识的&#xff0c;用户只有获得待访问主机的IPv6地址&#xff0c;才能够成功实现访问操作。对于用户来讲&#xff0c;记住主机的IPv6地址是相当困难的&#xff0c;因此设计了一种字符串形式的主机命名机制&#xff0c;这就是域名系统。用…

Java面试题———SpringBoot篇

目录 1、项目中为什么选择SpringBoot 2、SpringBoot的自动装配原理 3、SpringBoot的核心注解是哪个 4、SpringBoot中的starter是干什么的 5、SpringBoot可以有哪些方式加载配置 6、bootstrap.yml和application.yml有何区别 7、SpringBoot读取配置的方式有几种 8、Spring…

[Vue3核心语法] ref、reactive响应式数据

定义: ref用来定义&#xff1a;基本类型数据、对象类型数据&#xff1b; reactive用来定义&#xff1a;对象类型数据。 使用原则: 若需要一个基本类型的响应式数据&#xff0c;必须使用ref。 若需要一个响应式对象&#xff0c;层级不深&#xff0c;ref、reactive都可以。 …

高斯分布、均值与标准差:详细讲解与案例分析

目录 一、高斯分布的定义二、均值的意义三、标准差的作用四、均值与标准差在高斯分布中的关系五、实际应用中的高斯分布六、总结 高斯分布&#xff0c;又称为正态分布&#xff0c;是统计学和概率论中最重要的分布之一。它不仅在理论上有着极其重要的地位&#xff0c;而且在实际…

从HCI和空口分析HFP通话和eSCO建立

背景 HFP作为经典蓝牙通话建立和断开的协商服务&#xff0c;通话数据则是通过eSCO链路进行传输&#xff0c;下面以手机和蓝牙耳机为例&#xff0c;结合HCI和空口分析从HFP连接建立&#xff0c;到AT命令协商会话&#xff0c;再到eSCO通话数据链路的建立 。 1&#xff1a;HFP连…

C# 实操高并发分布式缓存解决方案

1. CAP 原则 CAP 原则也称为布鲁尔定理&#xff0c;由 Eric Brewer 在 2000 年提出&#xff0c;描述了分布式系统中的三个核心属性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition Tol…

【Linux】Linux常见指令及权限理解

1.ls指令 语法 &#xff1a; ls [ 选项 ][ 目录或文件 ] 功能 &#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文…

Golang | Leetcode Golang题解之第492题构造矩形

题目&#xff1a; 题解&#xff1a; func constructRectangle(area int) []int {w : int(math.Sqrt(float64(area)))for area%w > 0 {w--}return []int{area / w, w} }

鸿蒙网络编程系列21-使用HttpRequest上传任意文件到服务端示例

1. 前述文件上传功能简介 在前述文章鸿蒙网络编程系列11-使用HttpRequest上传文件到服务端示例中&#xff0c;为简化起见&#xff0c;只描述了如何上传文本类型的文件到服务端&#xff0c;对文件的大小也有一定的限制&#xff0c;只能作为鸿蒙API演示使用&#xff0c;在实际开…

深度学习-24-基于keras的十大经典算法之残差网络ResNet

文章目录 1 残差网络(ResNet)1.1 ResNet简介1.2 ResNet结构2 模型应用2.1 加载数据2.2 构建模型SimpleResNet2.2.1 simple_resnet_block2.2.2 SimpleResNet2.2.3 实例化模型2.2.4 模型训练2.2.5 模型预测2.3 构建模型ResNet182.3.1 residual_block2.3.2 ResNet182.3.3 训练模型…