首页 > 其他 > 详细

关于匹配的一些问题

时间:2017-02-17 20:15:30      阅读:200      评论:0      收藏:0      [点我收藏+]
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

 

关于匹配的一些问题

原文:http://www.cnblogs.com/jhz033/p/6411235.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!