【POJ 3487】 The Stable Marriage Problem (稳定婚姻问题)
The Stable Marriage ProblemDescription
The stable marriage problem consists of matching members of two different sets according to the member’s preferences for the other set’s members. The input for our problem consists of:
- a set M of n males;
- a set F of n females;
- for each male and female we have a list of all the members of the opposite gender in order of preference (from the most preferable to the least).
A marriage is a one-to-one mapping between males and females. A marriage is called stable, if there is no pair (m, f) such that f ∈ F prefers m ∈ M to her current partner and m prefers f over his current partner. The stable marriage A is called male-optimal if there is no other stable marriage B, where any male matches a female he prefers more than the one assigned in A.
Given preferable lists of males and females, you must find the male-optimal stable marriage.
Input
The first line gives you the number of tests. The first line of each test case contains integer n (0 < n < 27). Next line describes n male and n female names. Male name is a lowercase letter, female name is an upper-case letter. Then go n lines, that describe preferable lists for males. Next n lines describe preferable lists for females.
Output
For each test case find and print the pairs of the stable marriage, which is male-optimal. The pairs in each test case must be printed in lexicographical order of their male names as shown in sample output. Output an empty line between test cases.
Sample Input
2
3
a b c A B C
a:BAC
b:BAC
c:ACB
A:acb
B:bac
C:cab
3
a b c A B C
a:ABC
b:ABC
c:BCA
A:bac
B:acb
C:abcSample Output
a A
b B
c C a B
b A
c CSource
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 40 int ml[Maxn][Maxn],rk[Maxn][Maxn];
int fw[Maxn],fh[Maxn],nt[Maxn]; int n;
// bool pm[Maxn],pf[Maxn];
char s[Maxn]; queue<int > q; void init()
{
scanf("%d",&n);
// memset(pm,0,sizeof(pm));
// memset(pf,,sizeof(pf));
for(int i=;i<=n;i++)
{
scanf("%s",s);
// pm[s[0]-'a'+1]=1;
}
for(int i=;i<=n;i++)
{
scanf("%s",s);
// pf[s[0]-'A'+1]=1;
}
while(!q.empty()) q.pop();
memset(fw,,sizeof(fw));
memset(fh,,sizeof(fh));
for(int i=;i<=n;i++)
{
scanf("%s",s);
int x=s[]-'a'+;
for(int j=;j<=n;j++)
{
int y=s[j+]-'A'+;
ml[x][j]=y;
}
fw[x]=;nt[x]=;
q.push(x);
}
for(int i=;i<=n;i++)
{
scanf("%s",s);
int x=s[]-'A'+;
for(int j=;j<=n;j++)
{
int y=s[j+]-'a'+;
rk[x][y]=j;
}
fh[x]=;
}
} void engage(int x,int y)
{
int z=fh[y];
if(z)
{
fw[z]=;
q.push(z);
}
fw[x]=y;fh[y]=x;
} void ffind()
{
while(!q.empty())
{
int x=q.front();q.pop();
int y=ml[x][nt[x]++];
if(fh[y]==||rk[y][x]<rk[y][fh[y]])
engage(x,y);
else q.push(x);
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
ffind();
for(int i=;i<=;i++) if(fw[i])
{
printf("%c %c\n",'a'+i-,'A'+fw[i]-);
}
if(T) printf("\n");
}
return ;
}
[POJ3487]
这样我还WA了两次,next不记得++,还有最好清零用memset全清了来得干净~~
2016-10-26 20:51:44
【POJ 3487】 The Stable Marriage Problem (稳定婚姻问题)的更多相关文章
- poj 3478 The Stable Marriage Problem 稳定婚姻问题
题目给出n个男的和n个女的各自喜欢对方的程度,让你输出一个最佳搭配,使得他们全部人的婚姻都是稳定的. 所谓不稳婚姻是说.比方说有两对夫妇M1,F1和M2,F2,M1的老婆是F1,但他更爱F2;而F2的 ...
- POJ 3487 The Stable Marriage Problem(稳定婚姻问题 模版题)
Description The stable marriage problem consists of matching members of two different sets according ...
- [POJ 3487]The Stable Marriage Problem
Description The stable marriage problem consists of matching members of two different sets according ...
- 【转】稳定婚姻问题(Stable Marriage Problem)
转自http://www.cnblogs.com/drizzlecrj/archive/2008/09/12/1290176.html 稳定婚姻是组合数学里面的一个问题. 问题大概是这样:有一个社团里 ...
- The Stable Marriage Problem
经典稳定婚姻问题 “稳定婚姻问题(The Stable Marriage Problem)”大致说的就是100个GG和100个MM按照自己的喜欢程度给所有异性打分排序.每个帅哥都凭自己好恶给每个MM打 ...
- HDOJ 1914 The Stable Marriage Problem
rt 稳定婚姻匹配问题 The Stable Marriage Problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 6553 ...
- 【HDU1914 The Stable Marriage Problem】稳定婚姻问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1914 题目大意:问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序, ...
- 【HDOJ】1914 The Stable Marriage Problem
稳定婚姻问题,Gale-Shapley算法可解. /* 1914 */ #include <iostream> #include <sstream> #include < ...
- hdoj1435 Stable Match(稳定婚姻问题)
简单稳定婚姻问题. 题目描述不够全面,当距离相同时容量大的优先选择. 稳定婚姻问题不存在无解情况. #include<iostream> #include<cstring> # ...
随机推荐
- Python 基础【第三篇】输入和输出
这里我们创建一个python(pytest)脚本用于学习测试(以后都为这个文件,不多做解释喽),这个文件必须要有执行权限的哈 1.创建pytest并赋予执行权限 [root@fengyuba_serv ...
- Verilog-1995 VS Verilog-2001
http://www.cnblogs.com/tshell/p/3236476.html 2001年3月IEEE正式批准了Verilog‐2001标准(IEEE1364‐2001),与Verilog‐ ...
- 前后端分离 接口管理神器——Rap本地搭建
我这里要用做mockserver的就是rap了,rap结合了团队管理,项目管理,文档编写.Mock.js.可视化.接口过渡.文档历史版本(赞).mock插件(线上线下切换就只需要注释一句代码就OK), ...
- Linux操作系统搭建JDK开发环境
在Linuxer系统中,jdk环境常常是必需的,下面介绍下Oracle官方JDK安装方式 第一步:去jdk官网下载对应版本的JDK安装文件 第二步:解压文件,修改文件名 $ sudo mkdir /u ...
- /etc/shadow
这样,用户帐户本身在 /etc/passwd 中定义.Linux 系统包含一个 /etc/passwd 的同伴文件,叫做 /etc/shadow.该文件不像 /etc/passwd,只有对于 root ...
- Splay tree
类别:二叉排序树 空间效率:O(n) 时间效率:O(log n)内完成插入.查找.删除操作 创造者:Daniel Sleator和Robert Tarjan 优点:每次查询会调整树的结构,使被查询频率 ...
- OpenCV(4)-图像掩码操作(卷积)--平滑处理
卷积定义 矩阵的掩码操作即对图像进行卷积.对图像卷积操作的意义为:邻近像素对(包括该像素自身)对新像素的影响:影响大小取决于卷积核对应位置值得大小. 例如:图像增强可以使用 \[ I(i,j)=5*I ...
- 解决UIScrollView 的点击事件
目前有两种方法 第一种 通过 Category 扩展 UIScrollView 对象,添加触摸事件,(不建议,后续扩展不方便)代码如下 @implementation UIScrollView (Ex ...
- windows下使用xampp一键安装apache+php运行环境
感谢浏览,欢迎交流=.= 想为我老爸开发一套库存管理系统,借此机会打算使用下ext+php+apache+linux环境尝尝鲜. 为了在windows搭建本地开发测试环境,官网下载xampp,一键安装 ...
- linux下多线程踩过的坑(不定更新)
1,多线程下整个进程的退出 <<APUE>>关于进程环境一章中指出了进程退出的8个条件: ... (4)最后一个线程从启动例程中返回 (5)最后一个线程调用pthread_ex ...