入门力扣自学笔记180 C++ (题目编号:886)(涂色问题,可以多看看)
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)(涂色问题,可以多看看)相关推荐
- 入门力扣自学笔记118 C++ (题目编号1413)
1413. 逐步求和得到正数的最小值 题目: 给你一个整数数组 nums .你可以选定任意的 正数 startValue 作为初始值. 你需要从左到右遍历 nums 数组,并将 startValue ...
- 入门力扣自学笔记52 C++ (题目编号929)
929. 独特的电子邮件地址 题目: 每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 '@' 符号分隔.除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+' . 例如 ...
- 入门力扣自学笔记150 C++ (题目编号670)
670. 最大交换 题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : ...
- 20210325:力扣递归,回溯类型题目合集
力扣递归,回溯类型题目合集 题目 思路与算法 代码实现 写在最后 题目 子集 2. 90. 子集 II 3. 40. 组合总和 II 4. 22. 括号生成 思路与算法 子集:注释的很详细,递归生成子 ...
- 力扣题目归类,顺序刷题不再难
目录 介绍 前奏-基础篇 中篇-链表.树的相关操作 进阶-回溯.动态规划 脑筋急转弯 介绍 大家好,相信很多人都知道刷力扣的重要性,但是如果不能将题目很好的归类整理专一练习,而是东做一道西做一道,那么 ...
- 力扣刷题记录-回溯算法相关题目
首先介绍一下回溯算法 回溯通常在递归函数中体现,本质也是一种暴力的搜索方法,但可以解决一些用for循环暴力解决不了的问题,其应用有: 1.组合问题: 例:1 2 3 4这些数中找出组合为2的组合,有1 ...
- 力扣数据库题目刷题日记
一个准备秋招的菜鸟 此前已经在力扣上面刷过一些题目,从今天开始记录刷题 1. Day1 96/97题 难度:中等 解题思路 首先需要读懂题目的意思,必须要保证容量大于相同分数的人数的同时,选择最低的分 ...
- 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...
- 力扣- -正则表达式匹配
力扣- -正则表达式匹配 文章目录 力扣- -正则表达式匹配 一.题目描述 二.分析 方法一:Dp函数 明确状态和选择 确定状态转译方程 确定base case 完整代码 方法二:Dp table 明 ...
- 力扣--- 滑动谜题
力扣- 滑动谜题 文章目录 力扣--- 滑动谜题 一.题目描述 二.问题分析 三.代码 一.题目描述 二.问题分析 对于这种计算 最小步数的问题,我们就要敏感地想到 BFS 算法. 这个题目转化成 B ...
最新文章
- 6 OC中 isa 和 superclass 的总结
- cstring 比较_属牛人和属蛇人姻缘婚配关系比较和谐
- centos远程开机的操作
- 你今天怎么这么好看——基于深度学习的大型现场实时美颜
- jzoj3056-数字【数位dp,统计,容斥】
- 浅谈传统企业网络运营那些事儿
- 华为智能家居app未能连接上远程云服务_【InForSec通讯】智能家居云平台实体间交互状态安全分析 | Usenix2019...
- Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
- python学习day1:初识python
- Lightroom Classic 教程,如何在 Lightroom 中创建黑色电影效果?
- idea + debug
- redis知识点及常见面试题
- 报表开发工具FastReport开源代码2020首发更新!邀您免费下载
- ART-Pi 实现音乐播放器 --播放《天空之城》
- Nginx复习总结学习总结
- 如何关闭机房迦卡他卡进程,让你轻松上网。
- 怎么修复multisim_【血的教训】手把手教你修复崩溃的Windows系统
- 【Pytorch】张量复制方法repeat、repeat_interleave和tile
- JS 使用find 查找数组中某个元素
- centos篇---安装mysql详细步骤