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. python 中 str与bytes的转换

    # bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 b=b' ...

  2. KMP POJ 2406 Power Strings

    题目传送门 /* 题意:一个串有字串重复n次产生,求最大的n KMP:nex[]的性质应用,感觉对nex加深了理解 */ /************************************** ...

  3. 367 Valid Perfect Square 有效的完全平方数

    给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False.注意:不要使用任何内置的库函数,如  sqrt.示例 1:输入: 16输出: True示例 ...

  4. SQL中CRUD C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据

    在SQL server中对数据库的操作: 删除表:drop table 表名修改表:alter table 表名 添加列add 列名 列类型alter table 表名 drop column 列名 ...

  5. C#基础 out传值

    public void Out(out int a, out int b) {//out相当于return返回值 //可以返回多个值 //拿过来变量名的时候,里面默认为空值 a=1; b=2; } s ...

  6. 向listview控件中添加数据库数据

    //连接字符串 string str = "Data Source=.;Initial Catalog=mu;User ID=sa;Password=111"; //创建数据库连接 ...

  7. SQL 几个查看性能的语句

    1.查找目前SQL Server所执行的SQL语法,并展示资源情况: SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( ...

  8. Python(2)-第二天

    除法 >>> 8 / 5 1 >>> 8 / 5.0 1.6 >>> 8.0 / 5 1.6 >>> 8 // 5.0 1.0 ...

  9. 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)

    //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...

  10. VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscall

    根据个人遇到这个错误时的记录,原因可以分为一下几种: 原因一: 只是在.h里面声明了某个方法, 没有在cpp里面实现 . 具体讲,有时候在头文件中声明了需要的方法,确实忘记了在源文件中实现: 有时候在 ...