二分图:
不存在奇数环,染色法不存在矛盾.
最大匹配数
时间复杂度:O(N * M)
代码:
bool dfs(int x)
{
for(int i = h[x]; ~ i ; i = ne[i] )
{
int y = e[i];
if(!visit[y])
{
visit[y] = 1;
if(!match[y] || dfs(match[y]))
{
match[y] = x;
return true;
}
}
}
return false;
}
int main()
{
for(int i = 1; i <= n; i ++ )
{
memset(visit, 0, sizeof visit);
if(dfs(i)) ans ++ ;
}
}
最大匹配数:在二分图中,包含边数最多的一组匹配(任意两条边都没有公共端点的集合)的边的集合.
最小点覆盖:在二分图中,求出一个最小的点集S,使图中任意一条边都有至少有一个端点属于S.
最大独立集:任意两点之间都没有边相连,且包含点数最多的一个图.
最大团:任意两点之间都有一条边相连,且包含点数最多的一个图.
最小路径点覆盖:一张有向无环图,要求用尽量少的不相交的简单路径,覆盖有向无环图所有顶点(也就是每个顶点刚好覆盖一次).
最小路径重复点覆盖:
1.求传递闭包.
2.求最小路径点覆盖.
最大匹配树 = 最小点覆盖 = 总点数 - 最大独立集 = 总点数 - 最小路径点覆盖.