二分图最大匹配模板

/****************************************************
二分图匹配(匈牙利算法的DFS实现)
INIT:g[][]两边定点划分的情况
CALL:res=hungary();输出最大匹配数
优点:适于稠密图,DFS找增广路快,实现简洁易于理解
时间复杂度:O(VE);
****************************************************/
const int MAXN=1000;
int uN,vN;  //u,v数目
int g[MAXN][MAXN];//编号是0~n-1的
int linker[MAXN];
bool used[MAXN];
bool dfs(int u)
{
    int v;
    for(v=0;v<vN;v++)                        //如果g图从1开始则,v=1;v<=vN;v++
        if(g[u][v]&&!used[v])
        {
            used[v]=true;
            if(linker[v]==-1||dfs(linker[v]))
            {
                linker[v]=u;
                return true;
            }
        }
    return false;
}
int hungary()
{
    int res=0;
    int u;
    memset(linker,-1,sizeof(linker));
    for(u=0;u<uN;u++)                       //同上
    {
        memset(used,0,sizeof(used));
        if(dfs(u))  res++;
    }
    return res;
}
时间: 2024-10-21 23:10:36

二分图最大匹配模板的相关文章

二分图最大匹配模板【匈牙利;Dinic最大流】

二分图最大匹配模板[匈牙利:Dinic最大流] 匈牙利算法 int n,m; vector<int> map[100010]; int match[100010];//保存匹配的互相点 bool vis[100010]; bool dfs(int u) { for(int j=0;j<map[u].size();j++) { int v=map[u][j]; if(!vis[v]) { vis[v]=true; if(!match[v]||dfs(match[v])) { match[v

二分图最大匹配模板(pascal)

uoj#78. 二分图最大匹配 从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,-,nl1,-,nl 和 1,-,nr1,-,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为配偶. 请问这个班级里最多产生多少对配偶? 输入格式 第一行三个正整数,nl,nr,mnl,nr,m. 接下来 mm 行,每行两个整数 v,uv,u 表示第 vv 个男生和第 uu 个女生愿意结为配偶.保证 1≤v≤nl1≤v≤nl,1≤u≤nr1≤u≤nr,保证同一

HDU - 1083 Courses (二分图最大匹配模板)

题意:给出P门课程,N个学生.每一门课程可能有多个学生感兴趣然后我们需要匹配,使得每一门课程都只包含一名对其感兴趣的学生问:能否匹配成立思路:这个就是典型的二分图匹配问题.常用匈牙利算法 完整代码:(一开始写成了无向图....)写成有向图是因为学生是可以剩余的 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; c

二分图——多重匹配模板hdu1669

好像多重匹配一般是用网络流来做的.. 这是匈牙利算法的模板:lim是每个组的上界 思路是每个组都可以匹配lim个点,那么当点x遇到的组匹配的点数还没有超过lim时,直接匹配即可 如果已经等于了lim,这时就要从这个组的lim个点里找到一个能匹配到其他组的点(类似于普通匹配的寻找增广路过程) int dfs(int x,int lim){ for(int i=1;i<=m;i++)//枚举每个组 if(!vis[i] && mp[x][i]){ vis[i]=1; if(match[i

二分图最大匹配基本模板

最小顶点覆盖==二分图的最大匹配最少路径覆盖==n—最大匹配////n为左右集合中的顶点个数最大点独立集 = 顶点共个数 - 匹配顶点数 多个环的并?    例如:有n个国家,国家之间通过有向边相连,边有权值,?    现在让你把所有的国家都划成一个一个的圈,使得所有圈的总权值和最大.?    二分图的实质就是多个环,该题就是直接求出的二分图的最大权匹配就能求出最终结果.?    二分图的多个环的并就是二分图的最大(小)权匹配.?    所以KM求得最大匹配就是结果////////下面给出关于二

【二分图匹配入门专题1】H - Marriage Media light oj 1184【二分图最大匹配】

You run a marriage media. You take some profiles for men and women, and your task is to arrange as much marriages as you can. But after reading their bio-data you have found the following criteria. No man will marry a woman if their height gap is gre

【HDOJ 2063】过山车

[HDOJ 2063]过山车 二分图最大匹配模板题 1女对n男 问匹配最大对数 代码如下: #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <queue> #define INF 0x3f3f3f3f using namespace std; vector <int> head[555]; bool vis[555

二分图最优匹配模板

const int MAX = 1e6+10;const int inf = 0x3f3f3f3f;int n,m;int lx[MAX],ly[MAX];int match[MAX];int usex[MAX],usey[MAX];int w[MAX][MAX];int find(int u) {    usex[u]=1;    for(int i=0;i<m;i++) {        if(!usey[i]&&w[u][i]==ly[i]+lx[u]) {          

XidianOJ 1048 二分图匹配模板

题目描述 西电ACM实验室是一个很和谐的实验室,有n个男生和m个女生组成(m>0),尽管表面大家都全心全意地为了荣誉而战,然而经过亮亮的深入调查,我们已经知道了有一些人三心二意:每天只有99%的时间花费在切题上,而还有1%的时间在想着某位或某几位异性!作为FFF团西电分部的部长,亮亮显然不能容许这种朝三暮四的情况.但是西电ACM实验室又是一个很开明的实验室,于是亮亮决定尽可能的撮合实验室的队员! 那么问题来了,亮亮最多能撮合多少对呢? 输入 多组数据,每组数据首先是两个整数,n,m表示男女生的人