http://acm.hdu.edu.cn/showproblem.php?pid=1914

思路:Gale-Shapley算法。算法过程是男士不停地求婚,女士不停地拒绝。在每一轮中,每个尚未订婚的男士在他还没有求过婚的女士中选一个自己最喜欢的求婚(不管她有没有订婚)。然后每个女士在向她求婚的人之中选择她最喜欢的一个订婚,并且拒绝其他人。注意,这些向她求婚的人中包含她的未婚夫,因此她可以选择另一个自己更喜欢的人订婚,而抛弃自己的现任未婚夫。这个算法的结果是使男士都能娶到自己有可能娶到的最好的妻子,所以是对男士的理想配对。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
struct male
{
int f,rev[],tag;
} m[];
struct female
{
int tag,temp,val,wait[];
} f[];
int _,n,t,k,mf[][],fm[][];
char ch[];
bool ok()
{
int i;
for (i=;i<=;i++)
if (m[i].f==&&m[i].tag>) return true;
return false;
}
int main()
{
scanf("%d",&_);
while (_--)
{
scanf("%d",&n);
int i,j;
for (i=;i<=;i++)
{
f[i].tag=;
m[i].tag=;
}
for (i=;i<=n;i++)
{
scanf("%s",ch);
t=ch[]-'a'+;
m[t].f=;
m[t].tag=t;
memset(m[t].rev,,sizeof(m[t].rev));
}
for (i=;i<=n;i++)
{
scanf("%s",ch);
t=ch[]-'A'+;
f[t].tag=t;
f[t].temp=;
f[t].val=;
memset(f[t].wait,,sizeof(f[i].wait));
}
for (i=;i<=n;i++)
{
scanf("%s",ch);
t=ch[]-'a'+;
for (j=;j<=n+;j++)
mf[t][j-]=ch[j]-'A'+;
}
for (i=;i<=n;i++)
{
//cout<<1;
scanf("%s",ch);
t=ch[]-'A'+;
for (j=;j<=n+;j++)
fm[t][j-]=ch[j]-'a'+;
}
//cout<<"hhhhhhh"<<endl;
while (ok())
{
for (i=;i<=;i++)
{
if (m[i].f==&&m[i].tag>)
{
for (j=;j<=n;j++)
{
t=mf[i][j];
if (m[i].rev[t]==)
{
m[i].rev[t]=;
m[i].f=;
k=++f[t].wait[];
f[t].wait[k]=i;
break;
}
}
}
}
for (i=;i<=;i++)
{
if (f[i].tag>)
{
for (j=;j<=f[i].wait[];j++)
{
t=f[i].wait[j];
for (k=;k<=n;k++)
if (fm[i][k]==t) break;
if (f[i].val>k)
{
m[f[i].temp].f=;
f[i].temp=t;
f[i].val=k;
}
else m[t].f=;
}
f[i].wait[]=;
}
}
}
int out[];
memset(out,,sizeof(out));
for (i=;i<=;i++)
if (f[i].tag>)
{
j=f[i].temp;
out[j]=i;
}
for (i=;i<=;i++)
if (out[i]) printf("%c %c\n",i-+'a',out[i]-+'A');
if (_) printf("\n");
}
return ;
}

HDU1914(稳定婚姻)的更多相关文章

  1. hdu1914 稳定婚姻问题

               稳定婚姻问题就是给你n个男的,n个女的,然后给你每个男生中女生的排名,和女生心目中男生的排名,然后让你匹配成n对,使婚姻稳定,假如a和b匹配,c和d匹配,如果a认为d比b好,同时 ...

  2. HDU1914 稳定婚姻匹配

    The Stable Marriage Problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (J ...

  3. 【HDU1914 The Stable Marriage Problem】稳定婚姻问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1914 题目大意:问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序, ...

  4. UVA 1175 Ladies' Choice 稳定婚姻问题

    题目链接: 题目 Ladies' Choice Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu 问题 ...

  5. BZOJ2140: 稳定婚姻

    题解: 题意就是求二分图的必须边. 我们有结论: 在残量网络上跑tarjan,对于一条边(u,v) 如果该边满流||scc[u]==scc[v],那么该边是可行边. 因为如果scc[u]==scc[v ...

  6. 【POJ 3487】 The Stable Marriage Problem (稳定婚姻问题)

    The Stable Marriage Problem   Description The stable marriage problem consists of matching members o ...

  7. 【UVAlive 3989】 Ladies' Choice (稳定婚姻问题)

    Ladies' Choice Teenagers from the local high school have asked you to help them with the organizatio ...

  8. 【稳定婚姻问题】【HDU1435】【Stable Match】

    2015/7/1 19:48 题意:给一个带权二分图  求稳定匹配 稳定的意义是对于某2个匹配,比如,( a ---- 1) ,(b----2) , 如果 (a,2)<(a,1) 且(2,a)& ...

  9. poj 3487 稳定婚姻

    /** 稳定婚姻:男生不停的求婚,女生不停地拒绝 **/ #include <iostream> #include <queue> #include <cstdio> ...

  10. 稳定婚姻问题和Gale-Shapley算法(转)

    什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在 ...

随机推荐

  1. RHEL5.6环境下yum安装MySQL

    RHEL5.6环境下yum安装MySQL记录,2017年2月20日 1.卸载原有的MySQL rpm -qa命令查询是否安装了MySQL [root@localhost mysql]# rpm -qa ...

  2. 03—AOP基本配置

  3. redis学习-字典

    1.字典作用 实现数据库键空间(key space): 用作 Hash 类型键的底层实现之一: 2.字典实现的数据结构 typedef struct dict { // 特定于类型的处理函数 dict ...

  4. 第2章 JavaScript语法

    1.最好的做法是把<script>标签放到html文档的最后,</body>标签之前. 举例: ...... <script src="file.js" ...

  5. Dojo - 操作Dom的函数

    DOM Manipulation You might be seeing a trend here if you have gotten this far in the tutorial, in th ...

  6. opencv总结

    2018-02-2623:59:02 唉,这软件我很烦躁,今天又搞了好几遍,出错提示的时候总是出问题! 而且,无论什么错误,都是提示一堆乱码! 定义ROI区域有两种方法,第一种是使用cv:Rect.顾 ...

  7. 利用反射重写toString()方法

    为了方便输出对象,Object类提供了toString()方法.但是该方法的默认值是由类名和哈希码组成的,实用性并不强.通常需要重写该方法以提供更多的信息.本实例使用反射输出类的包.类的名字.类的公共 ...

  8. NoSQL与关系数据库

    关系型数据库:完全支持关系代数理论作为基础:有较大的数据规模:固定的数据库模式:查询效率快:强一致性:数据完整性较易实现:扩展性一般:可用性好. NoSQL:部分支持关系代数理论作为基础:有超大数据规 ...

  9. JS高级——弹出框的美化

    替换原有的alert方法,window.alert=function(){} https://blog.csdn.net/kirsten_z/article/details/76242286 http ...

  10. Python-Day07-图形用户界面和游戏开发

    Python-100Day-学习打卡Author: Seven_0507Date: 2019-05-22123 文章目录Python图形用户界面和游戏开发1. tkinter模块2. Pygame进行 ...