首页 > 其他分享 >染色法判定二分图

染色法判定二分图

时间:2024-08-02 09:49:45浏览次数:6  
标签:二分 false int dfs color flag 判定 染色法 return

染色法判定二分图

二分图:

1.当且仅当图中无奇数环

2.能且只能用两种颜色染色

 

#include <cstring> #include <iostream> #include <algorithm>   using namespace std;   const int N = 100010, M = 200010;   int n, m; int h[N], e[M], ne[M], idx; int color[N];   //邻接表 void add(int a, int b) {     e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ; }   bool dfs(int u, int c)//深度优先遍历,u是当前点下标,c是当前点染的颜色 {     color[u] = c;       for (int i = h[u]; i != -1; i = ne[i])//遍历与u相邻的所有点     {         int j = e[i];         if (!color[j])         {//如果没染色就染成与u的颜色不同的颜色并且如果dfs为false就返回false             if (!dfs(j, 3 - c)) return false;         }         else if (color[j] == c) return false;//如果染的颜色与u的颜色相同就返回false     }       return true;//剩余true }   int main() { //邻接表存图     scanf("%d%d", &n, &m);     memset(h, -1, sizeof h);     while (m -- )     {         int a, b;         scanf("%d%d", &a, &b);         add(a, b), add(b, a);//无向图-->双向存!     }       bool flag = true;//true是不矛盾     for (int i = 1; i <= n; i ++ )//n个顶点进行染色法         if (!color[i])         {//如果没有染色,就涂成1号色,如果dfs返回false说明就是有矛盾就flag=false退出循环             if (!dfs(i, 1))             {                 flag = false;                 break;             }         }       if (flag) puts("Yes");     else puts("No");       return 0; }  

标签:二分,false,int,dfs,color,flag,判定,染色法,return
From: https://www.cnblogs.com/luckyhappyyaoyao/p/18338074

相关文章

  • 二分查找
    二分查找(折半查找)前提:查找的序列必须是有序的,否则无法使用二分查找(每次比较有序序列的一半)4.二分法查找操作:使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。分析:二分法查找的前提是数组有序。假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid......
  • 二分查找法(折半查找)day06
    二分查找(折半查找)前提:查找的序列必须是有序的,否则无法使用二分查找4.二分法查找操作:使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。分析:二分法查找的前提是数组有序。假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指......
  • 代码随想录算法训练营day01|704. 二分查找,27. 移除元素,977.有序数组的平方
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/description/本人代码:classSolution{public:intsearch(vector<int>&nums,inttarget){intlow=0,high=nums.size()-1;//此处分情况讨论returnsearchTarget(nums,low,high,tar......
  • 二分答案
    P1182数列分段SectionII#include<bits/stdc++.h>usingnamespacestd;intn,m;intmaxx=0;inta[100005];//最大值最小化boolcheck(intx){longlongsum=a[0];intcnt=0;for(inti=1;i<n;i++){ if(sum+a[i]<=x) sum+=a[i]; else { cnt++;......
  • 【C++BFS算法 二分查找】2812. 找出最安全路径
    本文涉及知识点C++BFS算法C++二分查找LeetCode2812.找出最安全路径给你一个下标从0开始、大小为nxn的二维矩阵grid,其中(r,c)表示:如果grid[r][c]=1,则表示一个存在小偷的单元格如果grid[r][c]=0,则表示一个空单元格你最开始位于单元格(0,0)。在......
  • P3501 [POI2010] ANT-Antisymmetry 反对称 题解(字符串哈希+二分)
    原题题意若一个由010101组成的字符串将000和......
  • 代码随想录算法训练营Day0| LeetCode704: 二分查找
    LeetCode704二分查找先看了一下数组理论基础:数组基础题目链接:704.二分查找啥也没看,凭感觉直接上手:classSolution(object): defsearch(self,nums,target): fornuminnums: ifnum==target: returnnums.index(num) break return-1通过倒是......
  • 用Python实现二进制搜索(二分查找)
    二进制搜索(binarysearch,又称二分搜索)是一种快速有效的搜索方法,用于搜索有序列表中的元素。importmathdefbinary_search(sorted_list,target):"""在有序列表sorted_list中查找目标值target的位置使用二分查找算法"""lower_bound=0#初始......
  • 三种语言实现浮点数二分(C++/Python/Java)
    题目给定一个浮点数......
  • zzuli1057: 素数判定
    题目描述输入一个正整数n,判断n是否是素数,若n是素数,输出”Yes”,否则输出”No”。注意:1不是素数。输入输入一个正整数n(n<=1000)输出如果n是素数输出"Yes",否则输出"No"。输出占一行。样例输入2样例输出Yes本题考察求素数的方法,我在文章结束列举了3种方法,以......