给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。

每个人都可能不喜欢其他人,那么他们不应该属于同一组。

形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。

当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。

示例 1:

输入:N = 4, dislikes = [[1,2],[1,3],[2,4]]
输出:true
解释:group1 [1,4], group2 [2,3]

示例2:

输入:N = 3, dislikes = [[1,2],[1,3],[2,3]]
输出:false

示例3:

输入:N = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
输出:false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/possible-bipartition
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————————
解题思路:这道题类似于节点染色(假设染为红色和蓝色),对于当前节点,假设其颜色为红色,则其邻居颜色都需要被染色为蓝色;接着遍历其邻居节点,因为该邻居节点被染色为蓝色,则该邻居节点的邻居节点的颜色需要被染色为红色;

对于上述情况的不断递归,如果对某一个节点进行染色时,该节点已经被染色,同时其颜色和要被进行染色的颜色不同,则不能进行有效划分;

class Solution(object):def possibleBipartition(self, N, dislikes):graph = collections.defaultdict(list)for u, v in dislikes:  # 记录不能作为同一组的各种情况graph[u].append(v)graph[v].append(u)color = {}  # 用于保存已经被染色的节点def dfs(node, c = 0):  if node in color:  # 如果需要被染色的节点已经染色了return color[node] == c  # 判断其需要被染色的颜色和其自身颜色是否一样,不一样则不能进行有效划分color[node] = c  # 如果该节点没有被进行染色,则对其进行染色return all(dfs(nei, c ^ 1) for nei in graph[node])  # 对当前节点的所有邻居节点进行染色,注意使用异或操作改变需要染色的颜色return all(dfs(node) for node in range(1, N+1) if node not in color)  # all()的作用是当所有节点都能正常染色时返回True

Leetcode —— 886. 可能的二分法相关推荐

  1. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...

  2. leetcode 35. 搜索插入位置(二分法搜索失败的情况)

    35. 搜索插入位置 思路:二分查找 模板: 如果查找成功,返回target在nums中的下标 //二分查找模板 //nums[0..n-1]为有序数组,target为目标 int left=0; i ...

  3. LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...

  4. LeetCode 685. 冗余连接 II(并查集)

    1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...

  5. LeetCode 684. 冗余连接(并查集)

    1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...

  6. LeetCode中的那些题

    目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...

  7. leetcode 转载

    转载: https://blog.csdn.net/love905661433/article/details/84980135 LeetCode 1- 100 1. 两数之和 : https://b ...

  8. C#LeetCode刷题-深度优先搜索

    深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树 22.2% 中等 99 恢复二叉搜索树 45.1% 困难 100 相同的树 48.1% 简单 101 对称二叉树 42.1% 简单 ...

  9. 【二分法】剑指offer:二维数组中的查找

    对于二维数组中每一个一维数组,用二分查找,判断能否找到该数 leetcode专题笔记:二分法查找(1)(附leetcode题)_m0_52043808的博客-CSDN博客 代码: class Solu ...

最新文章

  1. linux安装qt_采用STM32MP1的PanGu Board开发板运行Qt应用
  2. flutter中state详解
  3. Vim取消查找后的高亮提示,:nohl或者:noh什么的都不管用,来一个简单粗暴方法
  4. python itertool_函数式编程的Python实践(2):Itertool
  5. C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)
  6. Scrapy 1.4 文档 01 初窥 Scrapy
  7. 隧道凿岩机器人_隧道凿岩机器人的研制
  8. PC_excel完毕一列英文小写变大写
  9. w25q64 linux,W25Q64Flash芯片STM32操作
  10. 原生js实现分页效果(带实例)
  11. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
  12. 《暮色4:破晓(上)》暮光之城 高清蓝光BD 1080P 720P下载,附中英双字字幕!...
  13. win10下载CAD之后任务栏卡死
  14. spark标签计算及用户画像应用
  15. PCB通孔类焊盘封装
  16. 整理了 47 个 Python 人工智能库
  17. MapReduce Inverted Index
  18. matlab限幅器无饱和怎么设置,抗积分饱和算法:输出限幅.ppt
  19. 关键词搜图、截图小助手——有了它妈妈再也不用担心我数据集啦
  20. python反爬虫原理与绕过实战pdf-antispider

热门文章

  1. Diskpart 磁盘管理实战演示
  2. 无线网络MIMO技术浅谈
  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问
  4. 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
  5. 容器编排技术 -- Kubernetes JSONpath Support
  6. 创建设计模式 - 工厂设计模式
  7. WPF 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
  8. java Set无序集合 HashSet 的对象元素唯一性
  9. 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
  10. markdown编辑器基础语法总结