二分图学习笔记
二分图匹配。
简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。
一个很大的算法,有二分图最大匹配,二分图最优匹配或者是二分图上独立集等等。。。。
下面,来讲一下二分图最大匹配的算法。。
二分图最大匹配和其判定采用的一般是染色法。。
对于一个图,将一个点进行染色,并染到其子节点。若有更优的解法,进行替换。其实,也类似于广搜。
板子。
bool dfs(int x) {
for(int i=1; i<=n; i++) {
if(vis[x][i]&&!us[i]) {
us[i]=1;
if(!col[i]||dfs(col[i])) {
col[i]=x;return 1;
}
}
}
return 0;
}
有关二分图的题,一般都不会出的那么裸。。
基本上只要建了图,就是最大匹配,最大独立集那么几种东西,随便搞搞就出来了。。
主要得先建好图,那答案和最大匹配也差不了多少了。
凑出样例,小心细节就可以过了。。。
有关二分图的几个推论。
推论一
一个二分图中的最大匹配数等于这个图中的最小点覆盖数
推论二
最小路径覆盖=最小路径覆盖=|G|-最大匹配数
在一个N*N的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,
且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,
那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每每条路径就是一个弱连通子集.
路径覆盖与二分图匹配的关系:最小路径覆盖=|G|-最大匹配数;
推论三
二分图最大独立集=顶点数-二分图最大匹配
独立集:图中任意两个顶点都不相连的顶点集合。
有关的也就结束了,
总之,二分图就是要想到如何建图,想好怎么建图。。。