二分图匹配

原创 2017年10月11日 21:33:57

最近做了一套匹配的题,然后就想简单的写一下 关于二分图匹配的问题。
首先二分图匹配是给N个人 分配P个任务,每个人对应一个任务,问能够匹配到的个数,而当个数最多是,这就是我们说的二分图的最大匹配,当每个人都有任务时,就是我们说的完美匹配。
那么这种问题应该如何求解呢?
(当然,我们可以增加一个源点和汇点变成最大流问题)

当然我们也可以通过另外一种方法

现在我们假设我们通过dfs 不断寻找增广路来实现二分图的最大匹配
具体思想就是,比如说,我们有小①和小②是一对,这时候小③过来要和小①在一起,那么这时候有两种办法 一种是让小③走开,另一种就是让小②去找小④,小②已经和小①配对了,我们去看看有没有小④,如果有小④,那么就可以配成两对,如果没有,就只能配成一对。当遇到冲突时,如果我能找到一种方法,让之前的配对的每个人都找到另外的配对,那么这样就会增加一个配对。 也就是所说的通过走交替路找到一条增广路。
模板如下:

vector<int>G[maxn];
int match[maxn];
bool used[maxn];
void add_edge(int u,int v)
{
    G[u].push_back(v);
    G[v].push_back(u);
}
bool dfs(int v)
{
    used[v]=true;
    for(int i=0;i<G[v].size();i++)
    {
        int u=G[v][i];
        int w=match[u];
        if(w<0||!used[w]&&dfs(w))//就是dfs寻找一个增广路
        {
            match[v]=u; 
            match[u]=v;
            return true;
        }
    }
    return false;
}
int bipartite_matching()
{
 int res=0;
 memset(match,-1,sizeof(match));
 for(int v=0;v<20;v++)
 {
    if(match[v]<0)
    {
        memset(used,0,sizeof(used));
    if(dfs(v))
    {
        res++;
    }
    }
 }
 return res;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ1274 — 二分图匹配模板题

The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22876...
  • llzhh
  • llzhh
  • 2016年07月23日 16:41
  • 309

POJ1469 COURSES 【二分图最大匹配·HK算法】

COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17777   Accep...
  • u012846486
  • u012846486
  • 2014年10月10日 21:23
  • 1270

二分图匹配——匈牙利算法の板子

ATP终于写完了人生第一篇学习笔记▽
  • FromATP
  • FromATP
  • 2016年11月09日 20:06
  • 568

二分图最大匹配模板

#include #include using namespace std; int e[101][101]; int match[101]; int book[101]; int n,m; i...
  • major_zhang
  • major_zhang
  • 2016年08月15日 15:31
  • 809

1.飞行员配对 二分图匹配(输出方案)/最大流斩

构建二分图,新建超级源汇点,所有边权为1,跑一次dinic,最大流即可最大匹配,关键是方案输出,遍历所有边(除去关于s,t的边),满流的边即可一组匹配。 #include #include #incl...
  • u011498819
  • u011498819
  • 2014年03月11日 15:17
  • 867

HDU2389---Rain on your Parade (二分图匹配-HK算法)

题目来源:https://vjudge.net/problem/HDU-2389题意在一个露天party里,宾客们在狂欢,还有ts时间将要下雨,现场有m个人,地上有n个雨伞,各自有着不同的坐标,人有着...
  • duan_1998
  • duan_1998
  • 2017年08月09日 15:49
  • 157

HDU I'm Telling the Truth (二分图最大匹配+字典序最大路径输出(好题))

关键在于建图,把 每个学生和它的可能的名次之间连上边,然后最大匹配,匹配时逆序进行(保证字典序的最大) #include #include #include #include #include #i...
  • u013167299
  • u013167299
  • 2015年08月24日 20:01
  • 539

【HDU 2063】过山车(二分图最大匹配模板题)

题面 RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每...
  • qq_30974369
  • qq_30974369
  • 2017年07月10日 17:25
  • 178

POJ 3041 (二分图匹配 最小顶点覆盖)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18793   Acc...
  • morejarphone
  • morejarphone
  • 2016年02月18日 11:57
  • 229

匈牙利算法(二分图匹配)

好,来讲简单的东西了匈牙利算法也就是二分图匹配Q二分图匹配是什么?还是先看题比较好 公牛和母牛 【问题描述】 有n只公牛和m只母牛,然后每只公牛都能和几只的母牛配对。在每只公牛只能配对一只母牛的...
  • qq_36038511
  • qq_36038511
  • 2017年04月07日 13:41
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分图匹配
举报原因:
原因补充:

(最多只允许输入30个字)