886. 可能的二分法

题目:

给定一组 n 人(编号为 1, 2, ..., n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。

给定整数 n 和数组 dislikes ,其中 dislikes[i] = [ai, bi] ,表示不允许将编号为 ai 和  bi的人归入同一组。当可以用这种方法将所有人分进两组时,返回 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


提示:

1 <= n <= 2000
0 <= dislikes.length <= 104
dislikes[i].length == 2
1 <= dislikes[i][j] <= n
ai < bi
dislikes 中每一组都 不同


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/possible-bipartition
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:

用两种颜色给图着色,能着色成功则可以把N个人分为两个小组,否则不能。

首先,我们利用一个容器来存储不喜欢的人的元素,从而构成一个二重的表。

其次,我们利用DFS的方式(也可以是BFS),来判断是否存在两两匹配的情况。

最后,如果中间出现无法匹配的情况,则直接返回false,否则,返回true。


代码:

class Solution {
public:bool possibleBipartition(int N, vector<vector<int>>& dislikes) {vector<int> colors(N + 1,0);vector<unordered_set<int>> graph(N+1);for(const auto& dislike : dislikes){graph[dislike[0]].insert(dislike[1]);graph[dislike[1]].insert(dislike[0]);}for(int i = 1;i <= N;i++){if(!colors[i] && ! dfs(N,graph,i,1,colors))return false;}return true;}private:bool dfs(int& N,vector<unordered_set<int>>& graph,int i,int color,vector<int>& colors){if(colors[i] != 0)return colors[i] == color;colors[i] = color;for(const auto& neighbor : graph[i]){if(!dfs(N,graph,neighbor,-1*color,colors))return false;}return true;}
};

入门力扣自学笔记180 C++ (题目编号:886)(涂色问题,可以多看看)相关推荐

  1. 入门力扣自学笔记118 C++ (题目编号1413)

    1413. 逐步求和得到正数的最小值 题目: 给你一个整数数组 nums .你可以选定任意的 正数 startValue 作为初始值. 你需要从左到右遍历 nums 数组,并将 startValue ...

  2. 入门力扣自学笔记52 C++ (题目编号929)

    929. 独特的电子邮件地址 题目: 每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@' 符号分隔.除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+' . 例如 ...

  3. 入门力扣自学笔记150 C++ (题目编号670)

    670. 最大交换 题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : ...

  4. 20210325:力扣递归,回溯类型题目合集

    力扣递归,回溯类型题目合集 题目 思路与算法 代码实现 写在最后 题目 子集 2. 90. 子集 II 3. 40. 组合总和 II 4. 22. 括号生成 思路与算法 子集:注释的很详细,递归生成子 ...

  5. 力扣题目归类,顺序刷题不再难

    目录 介绍 前奏-基础篇 中篇-链表.树的相关操作 进阶-回溯.动态规划 脑筋急转弯 介绍 大家好,相信很多人都知道刷力扣的重要性,但是如果不能将题目很好的归类整理专一练习,而是东做一道西做一道,那么 ...

  6. 力扣刷题记录-回溯算法相关题目

    首先介绍一下回溯算法 回溯通常在递归函数中体现,本质也是一种暴力的搜索方法,但可以解决一些用for循环暴力解决不了的问题,其应用有: 1.组合问题: 例:1 2 3 4这些数中找出组合为2的组合,有1 ...

  7. 力扣数据库题目刷题日记

    一个准备秋招的菜鸟 此前已经在力扣上面刷过一些题目,从今天开始记录刷题 1. Day1 96/97题 难度:中等 解题思路 首先需要读懂题目的意思,必须要保证容量大于相同分数的人数的同时,选择最低的分 ...

  8. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  9. 力扣- -正则表达式匹配

    力扣- -正则表达式匹配 文章目录 力扣- -正则表达式匹配 一.题目描述 二.分析 方法一:Dp函数 明确状态和选择 确定状态转译方程 确定base case 完整代码 方法二:Dp table 明 ...

  10. 力扣--- 滑动谜题

    力扣- 滑动谜题 文章目录 力扣--- 滑动谜题 一.题目描述 二.问题分析 三.代码 一.题目描述 二.问题分析 对于这种计算 最小步数的问题,我们就要敏感地想到 BFS 算法. 这个题目转化成 B ...

最新文章

  1. 6 OC中 isa 和 superclass 的总结
  2. cstring 比较_属牛人和属蛇人姻缘婚配关系比较和谐
  3. centos远程开机的操作
  4. 你今天怎么这么好看——基于深度学习的大型现场实时美颜
  5. jzoj3056-数字【数位dp,统计,容斥】
  6. 浅谈传统企业网络运营那些事儿
  7. 华为智能家居app未能连接上远程云服务_【InForSec通讯】智能家居云平台实体间交互状态安全分析 | Usenix2019...
  8. Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
  9. python学习day1:初识python
  10. Lightroom Classic 教程,如何在 Lightroom 中创建黑色电影效果?
  11. idea + debug
  12. redis知识点及常见面试题
  13. 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
  14. ART-Pi 实现音乐播放器 --播放《天空之城》
  15. Nginx复习总结学习总结
  16. 如何关闭机房迦卡他卡进程,让你轻松上网。
  17. 怎么修复multisim_【血的教训】手把手教你修复崩溃的Windows系统
  18. 【Pytorch】张量复制方法repeat、repeat_interleave和tile
  19. JS 使用find 查找数组中某个元素
  20. centos篇---安装mysql详细步骤

热门文章

  1. 电视剧《乡村爱情2》之演员表(ZT)
  2. 【爬虫】堆糖图片爬取
  3. 百度有啊创始团队写博客 自曝高层动荡内幕
  4. 来自GitHub的Python开源项目,100%可用的12306多功能抢票助手,切勿作为商业用途
  5. linux 即时通讯,Linux即时通讯Pidgin简洁漂亮的插件Screenlets[图文]
  6. hackbar工具安装使用教程
  7. 计算机等级考试四级--数据库原理
  8. 【Java课设】学生信息管理系统简易版(文件IO代替数据库)
  9. 实验二 单管交流放大电路
  10. angular中运用防抖功能