二分图

技术二分图 二分图二分图
定义
二分图,又称二部图,英文名叫 Bipartite graph。
二分图是什么节点由两个集合组成,且两个集合内部没有边的图。
换言之,存在一种方案,将节点划分成满足以上性质

二分图

二分图

定义

二分图,又称二部图,英文名叫 Bipartite graph。

二分图是什么节点由两个集合组成,且两个集合内部没有边的图。

换言之,存在一种方案,将节点划分成满足以上性质的两个集合。

二分图的性质:二分图一定不存在长度为奇数的环

染色法判定是否为二分图

思路分析:我们可以对每个点进行DFS并进行染色,如果存在一条边的两点颜色相同则说明不是二分图。

代码示例:

//#pragma注释(链接器,'/stack 336010240000000000,10240000000000 ')

//#pragma GCC优化(2)

#包含位/stdc .h

使用命名空间标准;

#定义For(i,a,b)For(int I=(a);I=(b);(一)

#为(int i=(b)定义Fod(i,b,a);I=(a);我)

#定义复式造表服务处(MultipleListingService)多集

#定义镑下限

#定义泛素蛋白上限

#定义平装书推回

#定义邮政信箱弹出菜单

#定义国际电报电话公司迭代器

#定义endl '\n '

#用_stdio(0)定义IOS IOS :3360 sync _ CIN。平局(0);

#定义低位(x) x (-x)

#定义clr(x) memset(x,0,sizeof(x));

#首先定义船方不负担装货费用

#定义硒秒

数据类型说明矢量罗马数字7

typedef vectorlong长vll

typedef长ll长

数据类型说明无符号长长的长长的

typedef pairint,int pii

typedef pairll,ll pll

const int MAXN=0x7fffffff

const int MOD=1000000007

const ll MOD1=212370440130137957 ll;

常量整数N=1e5 5

int h[N],e[2 * N],ne[2 * N],idx

整数颜色[N];

int n,m;

void add(int a,int b)

{

e[idx]=b,ne[idx]=h[a],h[a]=idx;

}

bool dfs(int u,int c)

{

颜色[u]=c;

for(int I=h[u];我!=-1;i=ne[i]) //对点u的每条出边进行染色

{

int j=e[I];

if(!颜色[j]) //如果还没有染色

{

if(!外勤部(j,3 - c))返回false//如果染色失败

}

else if(color[j]==c)返回false//如果两点颜色相同

}

返回真;

}

int main()

{

//IOS;

CIN;

memset(h,-1,sizeof h);

for(int I=1;I=m;(一)

{

int a,b;

CIN a b;

添加(a,b);

添加(b,a);

}

弯曲件标志=真;

for(int I=1;I=n;(一)

if(!颜色[i])

if(!外勤部(一,1))//外勤部(一、三)表示对我进行深度优先搜索染色后是否成功

{

标志=假

打破;

}

如果(标志)置位('是');

else puts(' No ');

返回0;

}

二分图最大匹配----匈牙利算法

我们先将点归为两个集合,分别记为1和2

由于要找到最大匹配,我们只需对1进行遍历向2匹配即可,不用对2再进行一遍同样操作。对于每一个点,我们先遍历他的所有出边,随后只要找到一个能匹配的就进行匹配,并用数组记录下来,但如果出边的终点已经有匹配了,则就再去寻找出边终点匹配的点(已用数组记录)是否有其他可匹配的点

代码示例:

//#pragma注释(链接器,'/stack 336010240000000000,10240000000000 ')

//#pragma GCC优化(2)

#包含位/stdc .h

使用命名空间标准;

#定义For(i,a,b)For(int I=(a);I=(b);(一)

#为(int i=(b)定义Fod(i,b,a);I=(a);我)

#定义复式造表服务处(MultipleListingService)多集

#定义镑下限

#定义泛素蛋白上限

#定义平装书推回

#定义邮政信箱弹出菜单

#定义国际电报电话公司迭代器

#定义endl '\n '

#用_stdio(0)定义IOS IOS :3360 sync _ CIN。平局(0);

#定义低位(x) x (-x)

#定义clr(x) memset(x,0,sizeof(x));

#首先定义船方不负担装货费用

#定义硒秒

数据类型说明矢量罗马数字7

typedef vectorlong长vll

typedef长ll长

数据类型说明无符号长长的长长的

typedef pairint,int pii

typedef pairll,ll pll

const int MAXN=0x7fffffff

const int MOD=1000000007

const ll MOD1=212370440130137957 ll;

常量整数N=505

const int M=1e5 5

int n1,n2,m;

int h[N],ne[M],e[M],idx

(同Internationalorganizations)国际组织匹配[N];

布尔街;

void add(int a,int b)

{

e[idx]=b,ne[idx]=h[a],h[a]=idx;

}

布尔查找(int x)

{

for(int I=h[x];~我;我不知道

{

int j=e[I];

if(st[j])继续;//j这一轮已经匹配了

st[j]=真;

if(match[j]==0 | | find(match[j])//match[j]存的是当前j的匹配对象

{

match[j]=x;//进行匹配

返回真;

}

}

返回错误的

}

int main()

{

//IOS;

CIN n1 N2 m;

memset(h,-1,sizeof h);

for(int I=1;I=m;(一)

{

int a,b;

CIN a b;

添加(a,b);

}

int RES=0;

for(int I=1;i=n1(一)

{

memset(st,false,st的大小);//每次都要初始化圣,因为每一轮遍历都有可能推翻之前的匹配

if(find(I))RES;

}

cout res endl

返回0;

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/114079.html

(0)

相关推荐

  • 怎么使用数据泵的parfile

    技术怎么使用数据泵的parfile本篇内容介绍了“怎么使用数据泵的parfile”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年11月9日
  • 音视频提取功能组件EasyStreamingServer读取本地文件时如何修复内存泄漏问题?

    技术音视频提取功能组件EasyStreamingServer读取本地文件出现内存泄露问题该如何修复本篇文章为大家展示了音视频提取功能组件EasyStreamingServer读取本地文件出现内存泄露问题该如何修复,内容简

    攻略 2021年12月21日
  • 度和千瓦时换算,度和千瓦时的换算是怎么的啊

    技术度和千瓦时换算,度和千瓦时的换算是怎么的啊千瓦时就是平时所说的“度”度和千瓦时换算,是电功的单位。瓦特是功率的单位。如果在功率上再乘以一个时间,那么这个结果就是功。1焦=1瓦×秒1千瓦时=1千瓦×1小时=1000瓦×

    生活 2021年10月25日
  • 香港多IP服务器、香港站群服务器为什么有利于SEO

    技术香港多IP服务器、香港站群服务器为什么有利于SEO网站所有者花费大量时间和金钱在搜索引擎的第一页上展示他们极具竞争力的网站。优化页面以使搜索引擎更容易阅读网站、制作SEO兼容的内容、从其他优质网站获取反向链接、发布促

    礼包 2021年11月1日
  • KALI搭建Docker+Vulhub漏洞复现环境

    技术KALI搭建Docker+Vulhub漏洞复现环境 KALI搭建Docker+Vulhub漏洞复现环境在学习网络安全的过程中,少不了的就是做漏洞复现,而漏洞复现一般比较常用的方式就是使用docker

    礼包 2021年12月21日
  • 市场前景好怎么形容,表示前景很好的四字成语

    技术市场前景好怎么形容,表示前景很好的四字成语1市场前景好怎么形容、前程似锦 2、鹏程万里 3、前途无量
    4、平步青云
    5、大展宏图1、 [拼音]:qián chéng sì jǐn[释义]:前程像锦绣那样。形容前途

    生活 2021年10月23日