LC-6256. 将节点分成尽可能多的组(二分图判定+BFS)【周赛322】

news2024/11/16 16:44:57

6256. 将节点分成尽可能多的组

难度困难8

给你一个正整数 n ,表示一个 无向 图中的节点数目,节点编号从 1n

同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 aibi 之间有一条 双向 边。注意给定的图可能是不连通的。

请你将图划分为 m 个组(编号从 1 开始),满足以下要求:

  • 图中每个节点都只属于一个组。
  • 图中每条边连接的两个点 [ai, bi] ,如果 ai 属于编号为 x 的组,bi 属于编号为 y 的组,那么 |y - x| = 1

请你返回最多可以将节点分为多少个组(也就是最大的 m )。如果没办法在给定条件下分组,请你返回 -1

示例 1:

img

输入:n = 6, edges = [[1,2],[1,4],[1,5],[2,6],[2,3],[4,6]]
输出:4
解释:如上图所示,
- 节点 5 在第一个组。
- 节点 1 在第二个组。
- 节点 2 和节点 4 在第三个组。
- 节点 3 和节点 6 在第四个组。
所有边都满足题目要求。
如果我们创建第五个组,将第三个组或者第四个组中任何一个节点放到第五个组,至少有一条边连接的两个节点所属的组编号不符合题目要求。

示例 2:

输入:n = 3, edges = [[1,2],[2,3],[3,1]]
输出:-1
解释:如果我们将节点 1 放入第一个组,节点 2 放入第二个组,节点 3 放入第三个组,前两条边满足题目要求,但第三条边不满足题目要求。
没有任何符合题目要求的分组方式。

提示:

  • 1 <= n <= 500
  • 1 <= edges.length <= 104
  • edges[i].length == 2
  • 1 <= ai, bi <= n
  • ai != bi
  • 两个点之间至多只有一条边。

二分图判定+BFS

题解:0x3f https://leetcode.cn/problems/divide-nodes-into-the-maximum-number-of-groups/solution/mei-ju-qi-dian-pao-bfs-by-endlesscheng-s5bu/

视频:https://leetcode.cn/link/?target=https://www.bilibili.com/video/BV15d4y147YF

class Solution:
    def magnificentSets(self, n: int, edges: List[List[int]]) -> int:
        # 建图
        g = [[] for _ in range(n)]
        for x, y in edges:
            x -= 1
            y -= 1 # 改成从0开始
            g[x].append(y)
            g[y].append(x)

        # 由于需要执行多次bfs,在方法内开visit数组浪费空间复杂度
        # 用clock 记录第几次遍历,time != clock 时说明这个点没有被访问
        time = [0] * n 
        clock = 0 
        def bfs(start: int) -> int: # 返回最大编号
            mx = 0 # 最大编号
            nonlocal clock
            clock += 1
            time[start] = clock
            q = deque([(start, base)]) # 初始化队列,存放开始和编号
            while q:
                x, id = q.popleft()
                mx = max(mx, id)
                for y in g[x]:
                    if time[y] != clock:
                        time[y] = clock
                        q.append((y, id+1))
            return mx

        color = [0] * n
        def dfs(x: int, c: int) -> bool: # 染色法判定二分图
            nodes.append(x)
            color[x] = c # 0表示没有染色,1表示红色,-1表示蓝色
            for y in g[x]:
                if color[y] == c or color[y] == 0 and not dfs(y, -c):
                    return False
            return True

        ans = 0
        for i,c in enumerate(color):
            if c: # 如果已经被染色,直接continue
                continue
            nodes = []
            if not dfs(i, 1): # 如果不是二分图,直接返回-1
                return -1
            # 是就开始分组
            base = ans + 1 # 从上一次编号开始,因为求最大的分组
            for x in nodes:
                ans = max(ans,bfs(x))
        
        return ans

相似题目

785. 判断二分图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第4章 R语言编程基础——数据整理与预处理

目录 4.1 经济/金融数据库 4.1.1 金融数据与数据库 4.1.2 国外金融数据库概况 4.1.3 国内金融数据库概况 4.1.4 数据的主要内容 4.2 数据格式 4.3 数据的导入 4.3.1 从控制台上输入数据 4.3.2 上市公司财务报表信息读取 4.4 [数据的预处理] 4.1.1 时序数据的预处理 4.1.2…

[附源码]Python计算机毕业设计Django汽车租赁管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

WEB前端网页设计 HTML网页代码 基础参数(二)

html文件调用css文件 <link rel"stylesheet" type"text/css" href"css文件相对路径"/> 设置颜色 Style"color:green;" 设置字体大小 font-size:50px; 设置边框 border&#xff1a;groove&#xff1b; 设置长、宽 heigh…

【通信原理】数字基带传输的线路码型

数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点&#xff0c;以及生成方法。注意观察频谱。文末附Matlab代码。 以下包括双极性NRZ、单极型NRZ、双极型RZ、单极型RZ、差分码&#xff0c;曼切斯特码/数字双相码、密勒码、CMI码、AMI码、HDB3码。 参数…

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…

Java多线程之:队列同步器AbstractQueuedSynchronizer原理剖析

Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析 文章目录Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析一、AQS的核心思想二、AQS中关键的内部结构一、Node内部类二、CLH队列三、同步状态 state四、Condition条件队列三、AQS…

houdini 之copy to points

将第一个输入中的几何图形复制到第二个输入的点上。 属性备注Source Group几何体来源Target Points要复制到的目标点集合Show Guide Geometry是否显示该操作预览流程Pack and Instance在复制之前将输入几何体打包到嵌入式打包图元中。这导致输入几何被每个副本共享&#xff08;…

跟着实例学Go语言(一)

本教程全面涵盖了Go语言基础的各个方面。一共80个例子&#xff0c;每个例子对应一个语言特性点&#xff0c;非常适合新人快速上手。 教程代码示例来自go by example&#xff0c;文字部分来自本人自己的理解。 本文是教程系列的第一部分&#xff0c;共计20个例子、约1万字。 目…

电子学会2021年3月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题&#xff08;共4题&#xff0c;共50分&#xff09; 青少年软件编程&#xff08;图形化&a…

python与pycharm配置http服务

下载安装pycharm 下载pycharm 提取码&#xff1a;slgh 在任意自己工作的目录下创建两个文件夹&#xff0c;www文件夹及其目录下cgi-bin文件夹 自己的工作目录\www\cgi-bin 打开pycharm创建工程&#xff0c;选择www\cgi-bin目录 配置cgi&#xff0c;选择Run菜单&#xff0c;…

动漫制作技巧如何制作动漫视频

动漫制作技巧是很多新人想了解的问题&#xff0c;今天小编就来解答与大家分享一下动漫制作流程&#xff0c;为了帮助有兴趣的同学理解&#xff0c;大多数人会选择动漫培训机构&#xff0c;那么今天小编就带大家来看看动漫制作要掌握哪些技巧&#xff1f; 一、动漫作品首先完成…

MedNeRF:用于从单个X射线重建3D感知CT投影的医学神经辐射场

摘要 计算机断层扫描&#xff08;CT&#xff09;是一种有效的医学成像方式&#xff0c;广泛应用于临床医学领域&#xff0c;用于各种病理的诊断。多探测器CT成像技术的进步实现了额外的功能&#xff0c;包括生成薄层多平面横截面身体成像和3D重建。然而&#xff0c;这涉及患者暴…

R语言确定聚类的最佳簇数:3种聚类优化方法

确定数据集中最佳的簇数是分区聚类&#xff08;例如k均值聚类&#xff09;中的一个基本问题&#xff0c;它要求用户指定要生成的簇数k。 最近我们被客户要求撰写关于聚类的研究报告&#xff0c;包括一些图形和统计输出。 一个简单且流行的解决方案包括检查使用分层聚类生成的树…

基于正则化Regularized Interpolation插值算法的图像超分辨重构研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、图像复原基本原理✳️ 三、正则化插值原理✳️ 四、实验验证✳️ 五、参考文献✳️ 六、Matlab程序获取与验证✳️ 一、引言 图像是一种表达信息的形式&#xff0c;其中&#xff0c;数字图像反馈的信息更加丰富。 在获取图像的过程中&am…

【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

【20221204】【每日一题】监控二叉树

给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 思路&#xff1a; 1、要尽可能的少安装摄像头&#xff0c;那么摄像头不可能安装在叶子节点上&#xff0c…

TLS及CA证书申请流程

一、概述 SSL 是“Secure Sockets Layer”的缩写&#xff0c;中文叫做“安全套接层”。它是在上世纪90年代中期&#xff0c;由网景公司设计的。 SSL/TLS是同一种协议&#xff0c;只不过是在不同阶段的不同称呼。 SSL协议位于TCP/IP协议与各种应用层协议之间&#xff0c;为数据通…

基于事件驱动的微服务教程

基于事件驱动的微服务教程 使用 Spring Boot、Spring Cloud、Kafka 和 Elasticsearch 掌握具有模式的事件驱动微服务架构 课程英文名&#xff1a;Event-Driven Microservices Spring Boot, Kafka and Elastic 此视频教程共22.0小时&#xff0c;中英双语字幕&#xff0c;画质…

javaee之黑马旅游网1

这是一个用来锻炼javaweb基础知识的项目&#xff0c;先来导入一些我们准备好的文件 下面这些东西是我们项目必备的&#xff0c;我们提前准备好了 &#xff0c;这个我会上传到我的资源&#xff0c;你们可以自己去下载 利用maven来创建一个项目 选择无骨架创建项目&#xff0c;域…

[附源码]计算机毕业设计小型银行管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…