hdu2063
2015-08-23 18:35
274 查看
链接:点击打开链接
题意:输入数据的第一行是三个整数K,M,N分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入
代码:
题意:输入数据的第一行是三个整数K,M,N分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000
1<=N和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int k,m,n; int rel[1005][1005],vis[505],girl[505]; int hungarian(int x){ //rel代表男女关系,vis代表是否用过,girl代表女生的配哪一个男生 int i,j; for(i=1;i<=m;i++){ if(rel[x][i]&&vis[i]==0){ vis[i]=1; if(!girl[i]||hungarian(girl[i])){ girl[i]=x; return 1; } } } return 0; } //匈牙利算法模板 int main(){ //就是二分图最大匹配 int i,sum,a,b; //推荐看这个博客写的通俗易懂 while(scanf("%d",&k)!=EOF&&k){ //http://blog.csdn.net/dark_scope/article/details/8880547 scanf("%d%d",&m,&n); memset(rel,0,sizeof(rel)); memset(girl,0,sizeof(girl)); for(i=1;i<=k;i++){ scanf("%d%d",&a,&b); rel[b][a]=1; } sum=0; for(i=1;i<=n;i++){ memset(vis,0,sizeof(vis)); if(hungarian(i)) sum++; } printf("%d\n",sum); } return 0; }
相关文章推荐
- mysql双主半同步的灾备测试结论
- 第3周工作周报-2组-王亮晶
- 最大连续区间和问题 —— 转自purplest C++博客
- 韩鱼总结
- ROM简单制作教程
- 正则表达式re中的贪心算法和非贪心算法 在python中的应用
- 七和弦
- MongoDB的基本使用(二)
- poj 1753 Flip Game
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
- 显示rust测试时候的print信息
- 数据结构—线性结构—线性及其实现
- 在MAC下如何用SSH连接远程LINUX服务器
- ZOJ 3787 Access System
- php set_error_handler() 重要用法
- 打不开Eclipse,Eclipse闪退(已解决)
- 有一种算法叫做“Union-Find”?
- Android通过代码模拟物理、屏幕点击事件
- 黑马程序员-----Java之你不得不知道的排序
- Queue和Stack头文件的使用