目录
二分图判定:
两组顶点,每组顶点内没有相交。
如何判断二分图?
递归,染色。
随意将一顶点染色为1,将与其相连的染色为-1,再将与-1相连的点染为1,如此重复直到遍历完整个图
如果有矛盾(两个相连点染色相同)则不为二分图
代码
int dfs(int u,int sum)
{
f[u]=sum;
for(int i=0; i<e[u].size(); i++) //vector存图(无向)
{
int v=e[u][i];
if(f[v]==sum) //颜色相同
return 1;
if(!f[v]&&dfs(v,-sum)) //深搜路径上有颜色相同
return 1;
}
return 0;
}
最大匹配
匈牙利算法 O(ne)
如图,这是一个二分图,左边集合为女生,右边为男生,图中连线为所有可能的找对象方案,如何选择使得有更多的女生可以找到男朋友(每个女/男生只能有一个男/女朋友)
首先从第一个女生开始,她只有一个心仪的对象,男2.那就相爱吧!
第二个女生, 心仪对象有两个,两个都没有女朋友,那就先选男1吧!
然后是女3,她心仪的男2已经有女1了呀!我们来调解下,看看女1可不可以换个男朋友,把男2让出来(女1:为啥要让我让!!)
哦吼,很不巧,女1死心塌地只要男2一个(调解失败)
那我们再来女3这边调解把,发现女3还喜欢男4,还说什么?上啊!
女4,喜欢的男1也有对象,那我们来调解下:
先来看看男1的女朋友女2怎么想(女2:随便咯,我还有一个心仪对象呢),然后女2换了个男朋友——男3(渣女的既视感怎么回事。。)
女4也就可以选择男1当男朋友啦!
最后是女5,喜欢的男3有了对象(调解)
男3对象是女2,女2的另一个心仪对象男1也有了女朋友(再次调解)
男1 对象是女4,女4没有别的心仪对象(调解失败)
这下女2也没有别的对象可以换(调解失败)
调解女5,她的另一个心仪对象男5没有对象,匹配成功!
以上所有调解过程都是递归过程
实现极其简单,(递归查询)这里只贴代码
//二位数组存图,