匈牙利算法 DFS模板(了解度+1)
//算法核心是求最大匹配数
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string.h>
#define maxint 999999999
using namespace std;
int cx[],cy[],edge[][];
int cx[];
int cy[];
int edge[][];//用二位数组实现邻接矩阵表示二分图的左右存在的关系,edge[i][j]表示二分图左i和右j是否存在关系,1表示存在,0表示不存在
bool vis[];//记录图右点是否被访问
int n,nx,ny;//nx表示图左可匹配数,ny是图右的可匹配数
int path(int u)
{
for(int i=;i<=ny;i++)
{
if(edge[u][i]&&!vis[i])//是否u与i存在可匹配关系且点右i未被标记
{
vis[i]=;
if(cy[i]==-||path(cy[i]))//cy[i]节点本身未被访问或cy[i]节点之后存在未被访问的点
{
cy[i]=u; //左右匹配
cx[u]=i;
return ; //最大匹配数+1
}
}
}
return ;//若不存在可匹配的则返回0
}
int match()
{
memset(cx,-,sizeof(cx));//约定用-1表示节点未被访问
memset(cy,-,sizeof(cy));
int res=;//记录最大匹配数
for(int i=;i<=nx;i++)
{
if(cx[i]==-)
{
memset(vis,,sizeof(vis)); //每次进入匹配需初始化标记
res+=path(i);
}
}
return res;
}
int main()
{
int x,y;
while(scanf("%d",&n)==&&n)
{
scanf("%d %d",&nx,&ny);
memset(edge,,sizeof(edge));
while(n--)
{
scanf("%d %d",&x,&y);
edge[x][y]=;
}
int sum=match();
printf("%d\n",sum);
}return ;
}
//明天再把bfs的写法理解一下。。
匈牙利算法 DFS模板(了解度+1)的更多相关文章
- 匈牙利算法dfs模板 [二分图][二分图最大匹配]
		
最近学了二分图最大匹配,bfs模板却死活打不出来?我可能学了假的bfs 于是用到了dfs模板 寻找二分图最大匹配的算法是匈牙利算法 匈牙利算法的主要程序是寻找增广路 寻找增光路是过程是:从一个未经配对 ...
 - 二分图最大匹配(匈牙利算法Dfs模板)
		
#include<iostream> #include<cstdio> #include<cstring> #define maxn 2020 using name ...
 - POJ-1469 COURSES ( 匈牙利算法 dfs + bfs )
		
题目链接: http://poj.org/problem?id=1469 Description Consider a group of N students and P courses. Each ...
 - 【bzoj4806~bzoj4809】 象棋四连发 DP-高精度-匈牙利算法-dfs
		
都是经典题了吧..我好无聊.. 4806 4806-1801是双倍经验..DP方程看代码吧.. /* http://www.cnblogs.com/karl07/ */ #include <cs ...
 - poj-1469-COURSES-二分图匹配-匈牙利算法(模板)
		
题意:N个学生,P个课程,问能不能找到课程的P个匹配. 思路:[早上睡醒了再写] 代码: #include <iostream> #include <cstdio> #incl ...
 - ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)
		
//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...
 - HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)
		
题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...
 - hdoj 2063 过山车【匈牙利算法+邻接矩阵or邻接表】
		
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
 - "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
		
博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...
 
随机推荐
- ServiceStack V3 版本 免费   redis的操作类
			
Referencing v3 packages in New Projects If you want a new project to use ServiceStack's v3 packages ...
 - java发送http的get、post请求[转]
			
原文链接:http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html package wzh.Http; import java.i ...
 - ppp数据帧的格式
			
参考http://blog.chinaunix.net/uid-11639156-id-2379044.html
 - 011-Scala中的apply实战详解
			
011-Scala中的apply实战详解 object中的apply方法 class中的apply方法 使用方法 apply方法可以应用在类或者Object对象中 class类 必须要创建实例化的类对 ...
 - 使用ISO文件安装Linux
			
一. 准备知识 1. ISO文件 我们普遍使用的ISO文件是指包含着整个CD-ROM(ISO-9660 文件系统)内容的 映象, 是整个碟片从0扇区到最后一个扇区的完整复制,经常被用来在网络上传输 对 ...
 - Eclipse打不开,提示: An error has occurred. see the log file
			
解决办法 删除.metadata目录下.plugins/org.eclipse.e4.workbench即可
 - 解决PHP大文件上传问题
			
PHP大文件上传问题 今天负责创业计划大赛的老师问我作品上报系统上传不了大文件,我当时纳闷了,做的时候没限制上传文件的大小阿,怎么会传不了呢,自己亲自体验了番,果然不 行,想了好一会儿才有点眉目 ...
 - php 画图片
			
<?php // 使用php操作gd库做图 // 1. 创建一个画布资源 $im = imagecreatetruecolor(80, 40); // 2. 画内容 // 2.1 先位画布准备颜 ...
 - C语言程序设计第五次作业
			
一.实验内容 1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!-+n! 2.输出1000以内的所有完数.所谓完数是指这个数恰好等于除他本身外的所有因子 ...
 - TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
			
在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外. 还有很多其它的网络性能测试工具. 如db, ...