首页 > 其他分享 >判断二分图的方法

判断二分图的方法

时间:2023-10-15 19:36:43浏览次数:41  
标签:二分 影子 判断 查集 端点 集合 方法

题目描述:龙龙得知2020年中国将有2000万至4000万男人娶不到老婆后。他打算好好调查一下是不是人们的感情出现问题。他对n个人进行调查,得到m条信息,每条信息表示为某两人曾经是情侣。由于他不知道这些人的性别,请你帮他判断一下,有没有同性是情侣的情况?

对于100%的数据,n的范围[2,100000],m的范围[0,100000]。
解题思路:很裸的一个判断二分图的模板,主要是讲有几种方法可以判断二分图
1.dfs染色法:dfs所有的点,给每个相邻的点染色成0/1;相邻的两点颜色不相同,判断如果遇到已经被染色过的点,并且与上一个点的颜色一样,那就判断改图不是二分图。
2.影子并查集(扩展域并查集):
1     for(int i=1;i<=2*n;i++)fa[i]=i;
2     for(int i=1;i<=m;i++){
3         scanf("%d%d",&x,&y);
4         int a=getfa(x),b=getfa(y);
5         int c=getfa(x+n),d=getfa(y+n);
6         if(a==b||d==c){f=false};
7         fa[a]=d;fa[b]=c;
8     }

如上,每个点都建立一个与之相对应的影子,将所有的点分成两个集合,对于一条边的两个端点,应该处于不同的集合中,分别将两个端点相应的影子端点放在分别与两端点相对的集合中,判断两个原端点或两个影子端点是否在一个集合中,如果在一个集合中,说明该图不是二分图。

3.带权并查集(核心思想:将两个相邻的点分成两类,用取模的思想快速判断是否是同一类端点)

注意事项(如图)帮助理解:

 

 






标签:二分,影子,判断,查集,端点,集合,方法
From: https://www.cnblogs.com/lizhongnan/p/17765999.html

相关文章

  • Java拾贝第二天——方法
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么方法方法就是一段可以重复调用的代码。方法也称函数无参方法无参方法其格式为:访问修饰符static返回值类型方法名(){//方法体[return返回值];}一个常规的Java代码结构应该如下:package包名;publicclass类名{......
  • 二分模板
    整数二分边界boolcheck(intx){/*...*/}//检查x是否满足某种性质//区间[l,r]被划分成[l,mid]和[mid+1,r]时使用:intbsearch_1(intl,intr){while(l<r){intmid=l+r>>1;if(check(mid))r=mid;//check()判断mid是......
  • js判断手机访问并跳转移动端网址
    1<scripttype="text/javascript">2functionuaredirect(murl){3try{4if(document.getElementById("bdmark")!=null){5return;6}7......
  • 设置Debian系统的root登陆的方法
    设置Debian系统的root登陆的方法kyyxxk于2023-05-1510:05:48发布阅读量1.2k 收藏 2点赞数1文章标签: debian linux 运维版权Debian桌面环境默认不允许root登录,所以需要修改配置。一、让Debian可以使用root登录1)首先修改gdm3的设定文件(/etc/gdm3/dae......
  • VTK 判断一个 点 是否在一个模型 stl 内部 vtk 点是否在内部 表面 寻找最近点
    判断一个点,判断是否在风格stl模型内部,或表面:目录1.方案一:使用vtkCellLocator  FindClosestPoint找到模型上距离给定点最近的一点,计算两点的距离,小于某一阈值则认为此点在模型上;2.方案二使用vtkKdTreePointLocator3.方案三使用vtkSelectEnclosedPoints1.方案一:使用vtk......
  • 探秘Java语言中子类调用父类的构造方法的方式
    父类的构造方法不能被子类继承。假定Base父类有以下构造方法:publicBase(Srtingmsg){this.msg=msg;}以下Sub类继承了Base类:publicclassSubextendsBase{}以上Sub类有一个隐含的默认构造方法,形式如下:publicSub(){}尽管在Base父类中定义了如下形式的构造方法:publicBase(Str......
  • 记录Orcad中报错和解决方法
    本章目的:使用Orcad画原理图总会遇到奇怪的报错,故整理总结 1、根本原因:有元器件没有编号;更新一下位号解决。提示➤ERROR(ORNET-1048):Designisnotannotated.ERROR(ORNET-1006): Netlist failed or may be unusable. 2、根本原因:DesignCache右键CleanupCache,和......
  • perl判断字符串包含
    perl判断字符串包含perl中没有判断字符串包含的函数,可以用正则表达式来实现这个功能,下面代码判断$str1是否包含$str2。if($str1=~/$str2/){...}if ($str1 !~/str2/) {    #匹配了不包含的}else {    #匹配了包含的}......
  • 核方法(kernel method)的主要思想
    本文对核方法(kernelmethod)进行简要的介绍(https://www.jianshu.com/p/8e2649a435c4)。核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的”,例如下图   左图的两类数据要想在一维空间上线性分开......
  • sqlServer查询字段位数不够补0方法
    1.查询字段为字符串函数:RIGHT('0000'+字符串,n)即:从右侧截取字符串,n代表侧截取的位数实例:SELECTRIGHT('0000'+'66',3)//结果:066实例:SELECTRIGHT('0000'+'66',4)//结果:00662.查询字段非字符串......