最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs

于是用到了dfs模板

寻找二分图最大匹配的算法是匈牙利算法

匈牙利算法的主要程序是寻找增广路

寻找增光路是过程是:从一个未经配对的点出发,历经未配边、匹配边、未配边、匹配边、未配边、...最终到达一个未配点的过程,只要把路径中的未配边和匹配边的“身份”对调,匹配就加一了。这就是一个寻找增广路的过程,通过不断寻找增广路,可以找到最大的匹配。

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; struct Edge{
int to,nxt;
Edge(int to=,int nxt=):
to(to),nxt(nxt){}
}; const int maxn=,maxm=; Edge E[maxm<<];
int head[maxn],mat[maxn];
bool check[maxn];
int n,n_l,n_r,m,cnt=; bool dfs(int u){
for(int e=head[u];e;e=E[e].nxt){
int v=E[e].to;
if(!check[v]){
check[v]=;
if(mat[v]==-||dfs(mat[v])){
mat[v]=u;
mat[u]=v;
return ;
}
}
}
return ;
} void hungarian(){
int ans=;
memset(mat,-,sizeof mat);
for(int u=;u<=n_l;u++)
if(mat[u]==-){
memset(check,,sizeof check);
if(dfs(u)) ans++;
}
printf("%d\n",ans);
} inline void ad_e(int from=,int to=){
E[++cnt]=Edge(to,head[from]);
head[from]=cnt;
E[++cnt]=Edge(from,head[to]);
head[to]=cnt;
} void init(){
scanf("%d%d%d",&n_l,&n_r,&m);
for(int i=,ff,tt;i<m;i++){
scanf("%d%d",&ff,&tt);
if(tt>n_r) continue;
ad_e(ff,tt+n_l);
}
} int main(){
init();
hungarian();
return ;
}

匈牙利算法dfs模板 [二分图][二分图最大匹配]的更多相关文章

  1. 二分图最大匹配(匈牙利算法Dfs模板)

    #include<iostream> #include<cstdio> #include<cstring> #define maxn 2020 using name ...

  2. 匈牙利算法 DFS模板(了解度+1)

    //算法核心是求最大匹配数 #include<bits/stdc++.h> #include<iostream> #include<cstdio> #include ...

  3. POJ-1469 COURSES ( 匈牙利算法 dfs + bfs )

    题目链接: http://poj.org/problem?id=1469 Description Consider a group of N students and P courses. Each ...

  4. 【bzoj4806~bzoj4809】 象棋四连发 DP-高精度-匈牙利算法-dfs

    都是经典题了吧..我好无聊.. 4806 4806-1801是双倍经验..DP方程看代码吧.. /* http://www.cnblogs.com/karl07/ */ #include <cs ...

  5. poj-1469-COURSES-二分图匹配-匈牙利算法(模板)

    题意:N个学生,P个课程,问能不能找到课程的P个匹配. 思路:[早上睡醒了再写] 代码: #include <iostream> #include <cstdio> #incl ...

  6. "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)

    博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...

  7. 二分图最大匹配:匈牙利算法的python实现

    二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是 ...

  8. HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)

    题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...

  9. HDU2444(KB10-B 二分图判定+最大匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

随机推荐

  1. DOM中常见的元素获取方式

    1.getElementById获取元素    返回的是一个元素对象 var  timer = document.getElementById('time'); console.dir   打印返回元 ...

  2. 微信小程序のwxml绑定

    一.微信小程序文件的构成 微信小程序包括js文件.json文件.wxml文件.wxss文件.wxs文件.js文件是展现界面的,注册这个程序的的页面,一般一个大写的Page({ })嵌入: json文件 ...

  3. (Struts2学习系列一)MyEclipse创建第一个struts2项目

    点击MyEclipse菜单栏File按钮,点击new-->Web Project 输入Project name之后点击Finish 项目创建完成. 然后右键项目,点击MyEclipse--> ...

  4. K-mean matlab 实现代码

    一.K均值聚类算法 算法步骤如下: 1.初始化 已知数据集合X,及事先指定聚类的总类数N,在X中随机选取N个对象作为初始的聚类中心. 2.设定迭代终止条件 通常设置最大循环次数或者聚类中心的变化误差. ...

  5. Android NDK 环境变量配置

    NDK_ROOT = C:\__S_D_K__\AndroidNDK\android-ndk-r20 在path 中加入  %NDK_ROOT% 我的路径在C盘 //个别的程序可能需要 NDK_ROO ...

  6. 自定义类型转换器---转Date类型

    在使用springMVC过程中 ,假如页面使用了 <form action="${pageContext.request.contextPath}/user/testDate" ...

  7. go语言type使用小技巧

    import "fmt" type Rank int const ( Rank001 Rank = iota Rank002 Rank003 Rank004 ) var rewar ...

  8. python之tkinter学习目录

    前言 下面的目录结构,采用的学习视频资料是网易云课堂中[莫凡]老师的,在目录的最下面的地方给出了对应的链接! 学习是逐渐积累起来的,代码也是!下面的每一篇中的对应代码,都秉承着这样的一个理念:代码是成 ...

  9. CodeForces 1166C A Tale of Two Lands

    题目链接:http://codeforces.com/problemset/problem/1166/C 题目大意 给定 n 个数,任选其中两个数 x,y,使得区间 [min(|x - y|, |x ...

  10. 图像直方图均衡化(C#)

    关于图像直方图均衡化的原理和步骤先不作讨论,我就看看代码吧. private Bitmap picequalization(Bitmap basemap, int width, int height) ...