关于匹配的一些问题

int n;
int mp[N][N];
int linker[N];
bool used[N];
bool dfs(int a)
{
    for(int i=0;i<n;i++)
      if(mp[a][i]&&!used[i])
      {
          used[i]=true;
          if(linker[i]==-1||dfs(linker[i]))
          {
              linker[i]=a;
              return true;
          }
      }
      return false;
}
int hungary()
{
    int result=0;
    memset(linker,-1,sizeof(linker));
    for(int i=0;i<n;i++)
    {
        memset(used,0,sizeof(used));
        if(dfs(i))  result++;
    }
    return result;
}
//记得初始化mp。。邝斌的板子

找出一个最大的集合使得该集合的任意两个人木有关系。

根据最大独立集 =顶点数 - 最大匹配数

hdu 1068

二分图的最小顶点覆盖数=最大匹配数

hdu 1150

DAG图(无回路有向图)的最小路径覆盖

hdu1151

 

原文地址:https://www.cnblogs.com/jhz033/p/6411235.html