过山车 【裸 匈牙利算法】
来源:互联网 发布:屏蔽淘宝网 百度 编辑:程序博客网 时间:2024/05/22 15:14
过山车
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12508 Accepted Submission(s): 5460
Problem Description
RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner。考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站在下面看着吧。聪明的Acmer,你可以帮忙算算最多有多少对组合可以坐上过山车吗?
Input
输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=10001<=N 和M<=500.接下来的K行,每行有两个数,分别表示女生Ai愿意和男生Bj做partner。最后一个0结束输入。
Output
对于每组数据,输出一个整数,表示可以坐上过山车的最多组合数。
Sample Input
6 3 31 11 21 32 12 33 10
Sample Output
3思路: 第一次接触的二分匹配匈牙利算法代码#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#define M 500+10using namespace std;int map[M][M]; // 判断 男女是否有关系int girl[M]; // 女生的搭档int used[M];int k,n,m;int find(int x){int j; for(j=1;j<=n;j++) // 枚举妹纸{if(map[j][x]&&!used[j]) // 如果x和当前的妹纸有关系{used[j]=1;if(girl[j]==-1||find(girl[j])) // 如果妹纸名花无主 或者 其主能够再找到另一个搭档{girl[j]=x;return 1;}}}return 0;}int main(){while(scanf("%d",&k)&&k){int i;scanf("%d%d",&n,&m);memset(map,0,sizeof(map)); // 初始化memset(girl,-1,sizeof(girl));for(i=0;i<k;i++){int x,y;scanf("%d%d",&x,&y);map[x][y]=map[y][x]=1;}int sum=0;for(i=1;i<=m;i++) // 枚举帅锅{memset(used,0,sizeof(used)); // 每一次 都初始化if(find(i)) sum++;}printf("%d\n",sum);}return 0;}#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#define CLR(a,b) memset((a),(b),sizeof(a))
#define inf 0x3f3f3f3f
#define mod 100009
#define LL long long
#define MAXN 500+10
#define MAXM 1000+10
#define ll o<<1
#define rr o<<1|1
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
using namespace std;
void read(int &x){
x=0;char c;
while((c=getchar())<'0');
do x=x*10+c-'0';while((c=getchar())>='0');
}
struct Edge {
int from,to,next;
}edge[MAXM];
int head[MAXN],top;
int k,n,m;
int girl[MAXN];
int vis[MAXN];
void addedge(int a,int b)
{
Edge e={a,b,head[a]};
edge[top]=e;head[a]=top++;
}
void init()
{
memset(head,-1,sizeof(head));
top=0;
memset(girl,-1,sizeof(girl));
}
void getmap()
{
int a,b;
while(k--)
{
scanf("%d%d",&a,&b);
addedge(a,b);
}
}
int find(int x)
{
int i,j;
for(int i=head[x];i!=-1;i=edge[i].next)
{
Edge e=edge[i];
if(!vis[e.to])
{
vis[e.to]=1;
if(girl[e.to]==-1||find(girl[e.to]))
{
girl[e.to]=x;
return 1;
}
}
}
return 0;
}
int main()
{
while(scanf("%d",&k )&&k)
{
scanf("%d%d",&n,&m);
init();
getmap();
int num=0;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(find(i))num++;
}
printf("%d\n",num);
}
return 0;
}
0 0
- 过山车 【裸 匈牙利算法】
- 过山车(匈牙利算法)
- 过山车-匈牙利算法
- 过山车(匈牙利算法)
- 过山车2063 匈牙利算法
- HDU2063 过山车 【匈牙利算法】
- HDOJ2063过山车 匈牙利算法
- 过山车 (匈牙利算法)
- hdu 过山车(匈牙利算法)
- HDOJ---2036 过山车[匈牙利算法]
- 过山车 邻接表 匈牙利算法
- HDoj-2063-过山车-匈牙利算法
- HDU 2063 过山车 匈牙利算法
- HDU2063---过山车(匈牙利算法)
- HDOJ 2063-过山车【匈牙利算法】
- hdoj2063过山车 匈牙利算法模板
- HDU 2063 过山车(匈牙利算法)
- (HDU2063)过山车(匈牙利算法入门)
- 二叉树
- Unreal 入门-Collision和Physics,碰撞检测
- SpringBoot之——spring boot + redis 实现session共享随笔
- Infoblox Grid Manager简介
- Unreal 入门-Unreal 基础知识。
- 过山车 【裸 匈牙利算法】
- 最常用的15大Eclipse开发快捷键技巧
- CodeForces 131D【图特性+BFS】
- QT--XML(未完)
- Unreal 入门-VR 游戏中需要注意的事情
- tiny-yolo 训练自己的数据集
- linux打开telnet端口
- UVA10817:Headmaster's Headache(状压dp)
- 什么是AOP?AOP面向切面编程
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
想开个粥铺
开家粥铺怎么样
想开家粥铺
我想开个粥铺
如何经营好粥铺
特色粥铺
哪里有粥铺
五谷粥铺
粥铺设备
齐状元粥铺
糖水粥铺
原粮粥铺
附近粥铺
粥铺投资
杨妈妈粥铺
粥铺培训
老糊粥铺
粥铺开业
碗碗香粥铺
吴家粥铺
尚品粥铺
粥铺店名
粥铺大全
小粥铺
伊品粥铺
五谷杂粮粥铺
排粪时肛门灼痛
画瓶储粪
粪怎么读
女粪尿馆
粪便
抹香鲸粪便
梦见粪便
蟑螂粪便
粪便颜色
粪便图片
粪便常规
梦到粪便
畜禽粪便
粪便带粘液
粪便发酵罐