题目链接


什么是婚姻匹配问题呢?我做了这道题后就有了这样的体会 —— 比谁更渣???

我们知道,有N个男生还有N个女生,要把每个男生和女生匹配起来,让他们结婚,但是呢,有这样的情况,就是假如我们现在B1和G1结婚了,但是呢G1比较B1更喜欢B2,并且B2现在还没有考虑别的女生,B2现在考虑到了G1,那这时候G1这个女孩纸会怎么办呢?甩了B1,跟B2走了!!!天呐,但是没错,稳定婚姻匹配问题就是这么的真实。

在这里,婚姻稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的。

同样的,我们也可以把婚姻稳定的问题这样阐述(也就是我代码里写的内容了):男孩先去找自己最喜欢的女孩,但是呢,如果这个女孩会被其他的男孩纸选到,并且这个女孩更爱那个后来的男孩纸,女孩就会跟她更爱的男生走了。然后先来的那个男孩子就失恋了,就哭了,他就要去找他的下一个喜欢的女孩纸(情感恢复的真快),然后看看能不能领导落单的她,或者比她现在的男朋友对这个女孩纸而言更man一点?

那么,最后的结果就会使得,女孩越换越能换到自己更喜欢的男孩纸,男孩纸也不会担心自己的女朋友跟别的男孩纸跑了,因为假如这个女孩纸有更喜欢的男孩纸,那么她更喜欢的男孩纸她一定选不了,是因为那些男孩纸也选择了自己更喜欢的女孩了。

  这个问题证明了,如果有更喜欢的TA,如果想挖墙角的话,只有TA被TA更喜欢的TA带走才行

上面那句话挺绕的,但是就是这样的一个过程,前面的拿到Tarjan,很好的阐述了这道题不可能发生的那种情况。

所以TA带不走你,要么是你对比现在的对象更不喜欢TA,或者是TA其实不是那样的喜欢你。

所以,有一句话说的很对,一切都是上天最好的安排。

My Code:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 505;
map<string, int> mp_B;
map<string, int> mp_G;
string str_boy[maxN], str_girl[maxN], str;
int N, boy[maxN], girl[maxN], Index, b_love_g[maxN][maxN], g_deep_b[maxN][maxN];    //b_love_g表示第几男生第几喜欢的女生、g_deep_b表示第几女生对第几男生的喜欢程度
int kth[maxN]; //对应的男生选到了第几个女孩纸了
inline void marry_with_you()
{for(int i=1; i<=N; i++) kth[i] = 1; //每个男孩子都想先选到自己最喜欢的女孩纸bool flag = false;while(true) //不断的选自己稳定的婚姻{flag = false;for(int i=1; i<=N; i++) //男孩纸去选自己还能选到的女孩{if(!boy[i]) //这个男孩子还处在待嫁的年纪{int g = b_love_g[i][kth[i]++]; //男孩想去选的女孩if(!girl[g])    //这个女孩还没选其他的男孩纸{boy[i] = g;girl[g] = i;continue;}else if(g_deep_b[g][i] > g_deep_b[g][girl[g]])  //女孩觉得这个新的男孩更好,她抛弃了原先的男盆友,(雾{boy[girl[g]] = 0;boy[i] = g;girl[g] = i;}flag = true;}}if(!flag) break;    //这时候已经没有能结婚的人了,他们都不管是否美满已经结起来了}for(int i=1; i<=N; i++){cout << str_boy[i] << " " << str_girl[boy[i]] << endl;  //男孩和男孩配对的女孩纸}
}
inline void init()
{Index = 0;mp_B.clear();mp_G.clear();for(int i=1; i<=N; i++) boy[i] = girl[i] = 0;   //他们都仍然是独立的他们
}
int main()
{while(scanf("%d", &N) != EOF){init();for(int i=1; i<=N; i++) //男孩喜欢的女生“们”(渣{cin>>str_boy[i];mp_B[str_boy[i]] = i;for(int j=1; j<=N; j++){cin>>str;if(!mp_G[str]){mp_G[str] = ++Index;str_girl[Index] = str;}b_love_g[i][j] = mp_G[str];}}for(int i=1; i<=N; i++) //处理女孩喜欢的男生“们”(也渣{cin>>str;int g = mp_G[str];for(int j=0; j<N; j++){cin>>str;g_deep_b[g][mp_B[str]] = N - j; //喜欢的程度,越高表示的是越喜欢}}marry_with_you();}return 0;
}

Marriage is Stable 【HDU - 1522】【稳定婚姻匹配问题】相关推荐

  1. HDU 1435 Stable Match (稳定婚姻匹配)

    题意:建立一个匹配表,使得一个发射点对应一个接收点,对于某一个发射点来说,它的接收点离它越近那么就会更稳定,同样对于接收点也是一样的情况. 匹配的目标是使得整个网络变得稳定. 对于某2个匹配,比如,( ...

  2. HDU 1522 Marriage is Stable (稳定婚姻匹配)

    题意:稳定婚姻匹配问题,板子题. 题解:稳定婚姻匹配 还好做了这题,之前的板子有点问题,1435数据太弱了. #define _CRT_SECURE_NO_WARNINGS #include<i ...

  3. HDU 1914 The Stable Marriage Problem (稳定婚姻匹配)

    题意:稳定婚姻匹配问题,板子题. 题解:稳定婚姻匹配 注意按字典序输出,还有输出格式,最后个样例不输出空行. #define _CRT_SECURE_NO_WARNINGS #include<i ...

  4. 稳定婚姻匹配(Stable Match, HDOJ 1435, HDOJ 1914, 详解)

    稳定婚姻匹配 HDOJ 1435 Stable Match(此例基于发射点优先的匹配,但题目并未明确表明) Time Limit: 2000/1000 MS (Java/Others) Memory ...

  5. SGU 264 Travel(稳定婚姻匹配)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=264 题意:稳定婚姻匹配. 思路:对于每个男的依次从自己最喜欢的女的开始求婚若女的还 ...

  6. Hdu1914稳定婚姻匹配

    题意: 给出 n 个男生,n 个女生,给出他们对异性的喜欢顺序,求一个稳定的婚姻组合. 思路: 稳定婚姻匹配裸题 #include <cstdio> #include <cstrin ...

  7. ALG1:GS算法,稳定婚姻匹配问题

    ALG1:GS算法,稳定婚姻匹配问题 问题描述如下: (详见NKU计算机上机课程辅助评测) 稳定婚姻匹配 实现代码: (此代码逻辑可通过全部测试样例) 由于代码有一段时间了,一下的展示代码是没有自己的 ...

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

    HDU1435 简单的稳定婚姻问题,寒假写过了,又拿出来看辽一遍嘻嘻. 算法的理解注释里写的非常清楚辽. 稳定婚姻问题又被称作不想单身的渣男的脱单之路.--鲁迅 参考:[稳定婚姻问题][HDU1435 ...

  9. hdu - 1435 Stable Match 稳定婚姻问题、Gale-Shapley算法模板

    稳定婚姻的描述: 假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心中的排名,你应该怎样为他们牵线 ...

最新文章

  1. 女神推荐, 卡片,广告图 ,点击查看更多
  2. 腾讯笔试题 如下代码,result变量的输出结果是多少
  3. Android异步处理二:AsynTask介绍和使用AsyncTask异步更新UI界面
  4. iOS7与iOS8的比較
  5. FM之NUMERIC_CHECK
  6. 关于ubantu软件包的相关记录
  7. 人脸识别技术原理与工程实践
  8. 玩转FusionCharts:Y轴数字形式(如去掉K)
  9. 恩智浦智能车大赛2020_我院第十三届“恩智浦”杯智能车校内选拔赛宣讲会顺利举行...
  10. Java基础学习总结(140)——Java8 Stream之Stream流创建的几种方式
  11. selenium常用获取元素点
  12. 官方实锤!微软宣布以 75 亿美元收购 GitHub
  13. 我的R 之路: R最常见的小基础。。。。。。。。
  14. Matlab画柱状图和饼状图以及横纵坐标设置,宽度设置等
  15. 数值计算值第四期:解线性方程组的扰动分析
  16. 群晖NAS Git Server项目源代码管理 配置搭建
  17. 少年五年升阿里 P8,他如何从低谷登上“光明顶”?
  18. 容器存储卷的介绍与使用
  19. 311 稀疏矩阵的乘法
  20. GB/T 25000.51-2016解读系列之易用性

热门文章

  1. 前锋python怎么样_Python 带你分析,英超是否已经大结局
  2. DBA面试资源合集(含Oracle、MySQL、Redis等)
  3. 智慧物业类管理APP开发功能有哪些?
  4. 【Android】Bitmap图像色彩模式:黑白、模糊、老照片、胶卷等(92/100)
  5. Ubuntu 18.04 LTS 显卡驱动(418.67 )及CUDA(10.1)安装
  6. 看大数据时代下的IT架构(1)图片服务器之演进史
  7. Mysql 常用语句实战(1)
  8. EntityUtils 工具类
  9. 如何实现C++中类编写的头文件和源文件的拆分
  10. Vim 常用命令记录