首页 > 试题广场 >

【模板】二分图结构Ⅰ-A ‖ 染色判定:DFS

[编程题]【模板】二分图结构Ⅰ-A ‖ 染色判定:DFS
  • 热度指数:2288 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 1024M,其他语言2048M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由 n 个顶点、m 条边构成的无向连通图,判定其是否为二分图

【名词解释】
\hspace{15pt}二分图:可将顶点集合划分为两个独立集,且所有边均连接不同集合的图。

输入描述:
\hspace{15pt}第一行输入两个整数 n,m \left( 1 \leqq n, m \leqq 3 \times 10^5\right) 代表顶点数量、边数量。
\hspace{15pt}此后 m 行,第 i 行输入两个整数 u_iv_i \left( 1 \leqq u_i, v_i \leqq n;\ u_i \neq v_i \right),表示图上第 i 条边双向连接顶点 u_iv_i

\hspace{15pt}图可能存在重边。不存在自环、保证连通。


输出描述:
\hspace{15pt}如果给定的图不是一张二分图,输出 \texttt{NO};否则输出 \texttt{YES}
示例1

输入

5 6
1 2
2 3
3 4
4 1
4 5
5 2

输出

YES

说明

\hspace{15pt}在这个样例中,把顶点 1, 3, 5 点染色为白,2, 4 点染色为黑,即可满足二分图要求,所以这个图是二分图。

图片
示例2

输入

5 4
1 2
2 3
3 1
4 5

输出

NO

说明



备注:
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-07-07 优化题面文本与格式
2. 2025-11-28 第一组样例 m 与实际边数不符,修正。模板题为便于测试,将时间限制扩充至 5s,空间限制扩充至 1024MB。
3. 2025-12-05 对题面与数据进行了微调,以匹配整套模板题(n,m10^5 增加到 3 \times 10^5,输出修改为全大写的 \texttt{YES}\texttt{NO},去除了题面背景,增加了重边数据)。
头像 白伟仝
发表于 2020-05-12 20:40:52
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.ne 展开全文
头像 zime_www
发表于 2025-07-31 23:29:44
#include <bits/stdc++.h> #define fi first #define se second using namespace std; using LL = long long; constexpr int N = 2e5 + 5; int n, m; int 展开全文
头像 冷艳的西红柿刷牛客
发表于 2025-11-11 10:30:40
#include <iostream> #include <vector> #include <queue> using namespace std; int main () { int n, m; cin >> n >> m; 展开全文
头像 丨阿伟丨
发表于 2025-09-01 09:58:08
题目链接 二分图判定 题目描述 给定一个包含 个节点和 条边的无向图。如果能将图中的节点染成黑白两种颜色,使得每条边的两个端点颜色都不同,那么这个图就被称为二分图。 任务是判断给定的图是否为二分图。 解题思路 判断一个图是否为二分图的经典方法是染色法。一个图是二分图,当且仅当它不包含任何奇数长度 展开全文
头像 bandiaoz
发表于 2024-12-26 15:05:08
解题思路 这是一道判断给定图是否为二分图的题目,主要思路如下: 二分图的定义: 可以将图中的顶点分成两个不相交的集合 每条边的两个顶点分别属于不同集合 可以用两种颜色对顶点染色,相邻顶点颜色不同 解决方案: 使用BFS进行染色 从任意未染色的点开始,将其染成颜色1 将其相邻点染成相反的 展开全文
头像 牛客题解官
发表于 2020-06-05 16:40:48
题解 题目难度:中等难度知识点:图、邻接矩阵、DFS DFS方法思路: 步骤一:构造邻接邻接矩阵G[N] 示例一点连接情况的输入:1 22 33 44 14 55 2其G[N]为: 步骤二:用color[N]表示点的着色情况,例如点2,color[2]=0表示点2未着色,color[2]=1表示点 展开全文
头像 ikun_ac
发表于 2025-08-09 01:13:41
题目链接 二分图判定 题目描述 给定一张包含 个节点、 条无向边的图(不保证连通)。若存在一种黑白二色染色方式,使任意一条边的两个端点颜色不同,则该图为二分图。判断所给图是否为二分图。 输入: 第一行两个整数 、 接下来 行,每行两个整数 、 表示一条无向边 输出: 若该图为二分图,输出 展开全文
头像 小胡放轻松
发表于 2025-12-08 23:39:11
#include <iostream> #include <vector> #include <unordered_map> #include <unordered_set> #include <string> using namespac 展开全文