<题目链接>

题目大意:

给你N个男生和N个女生,并且给出所有男生和女生对其它所有异性的喜欢程度,喜欢程度越高的两个异性越容易配对,现在求出它们之间的稳定匹配。

解题分析:

稳定婚姻问题的模板题,需要用到Gale_Shapley算法,GS算法讲解  >>>

这个算法还是很直观的。

 #include <iostream>
#include <cstring>
#include <stack>
#include <string>
#include <map>
#include <algorithm>
using namespace std; #define N 505
#define clr(a,b) memset(a,b,sizeof(a))
#define rep(i,s,t) for(int i=s;i<=t;i++) int n,getmp_boy[N][N],getmp_girl[N][N],boy[N],girl[N],rnk[N];
map<string,int>mp_boy,mp_girl;
string s,name_boy[N],name_girl[N]; void Gale_Shapley(){
clr(boy,);clr(girl,);
rep(i,,n) rnk[i]=;
while(true){
bool flag=false;
rep(i,,n){
if(!boy[i]){
int x=getmp_boy[i][rnk[i]++]; //x为当前男生所最求的他没有尝试最求过的最喜欢的女生
if(!girl[x]){ //如果这个女生没有和男生配对
boy[i]=x; //那么这对男女进行配对
girl[x]=i;
}else if(getmp_girl[x][i] > getmp_girl[x][girl[x]]){ //如果当前女生已经配对,那么就判断她对这两个男生的喜欢程度
boy[girl[x]]=; //将原来的男生抛弃
girl[x]=i; //将这两个男女进行配对
boy[i]=x;
}
flag=true;
}
}
if(!flag)break; //如果所有男生都已配对,则直接退出
}
rep(i,,n) cout<<name_boy[i]<<" "<<name_girl[boy[i]]<<endl;
} int main(){
ios_base::sync_with_stdio(false);
cin.tie();cout.tie();
while(cin>>n){
mp_boy.clear();mp_girl.clear();
int pos=,tmp;
rep(i,,n){
cin>>s;name_boy[i]=s;
mp_boy[s]=i;
rep(j,,n){
cin>>s;tmp=mp_girl[s];
if(!tmp){ //对于之前没有出现过个的女生姓名,重新分配序号
tmp=pos++;
mp_girl[s]=tmp;
name_girl[tmp]=s;
}
getmp_boy[i][j]=tmp; //记录第i个男生第j个喜欢的女生是tmp
}
}
rep(i,,n){
cin>>s;int x=mp_girl[s];
rep(j,,n){
cin>>s;int y=mp_boy[s];
getmp_girl[x][y]=n-j; //记录第i个女生喜欢男生y的程度是n-j
}
}
Gale_Shapley();
}
}

2019-01-17

HDU 1522 Marriage is Stable 【稳定婚姻匹配】(模板题)的更多相关文章

  1. HDU 1522 Marriage is Stable 稳定婚姻匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=1522 #include<bits/stdc++.h> #define INF 0x3f3f3f3f ...

  2. HDU1522 稳定婚姻匹配 模板

    Marriage is Stable Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. POJ 3487 The Stable Marriage Problem(稳定婚姻问题 模版题)

    Description The stable marriage problem consists of matching members of two different sets according ...

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

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

  5. HDU1914 稳定婚姻匹配

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

  6. HDU 1512 Monkey King(左偏树模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...

  7. HDU 1213 - How Many Tables - [并查集模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 Today is Ignatius' birthday. He invites a lot of ...

  8. HDU 3068 最长回文( Manacher模板题 )

    链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...

  9. HDU - 3081 Marriage Match II 【二分匹配】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意 有n对男女 女生去选男朋友 如果女生从来没和那个男生吵架 那么那个男生就可以当她男朋友 女 ...

随机推荐

  1. Modbus库开发笔记之八:CRC循环冗余校验的研究与实现

    谈到Modbus通讯自然免不了循环冗余校验(CRC),特别是在标准的串行RTU链路上是必不可少的.不仅如此在其他开发中,也经常要用到CRC 算法对各种数据进行校验.这样一来,我们就需要研究一下这个循环 ...

  2. Confluence 6 导入一个文本文件

    Confluence 允许你从 Confluence 服务器上的一个目录中导入一个文本文件,然后将这个文本文件转换为 Confluence 的页面.每一个文本文件将会在 Confluence 中创建一 ...

  3. spring boot 解决跨域访问

    package com.newings.disaster.shelters.configuration; import org.springframework.context.annotation.B ...

  4. 1706: 神奇的编码(zzuli)

    题目描述 假如没有阿拉伯数字,我们要怎么表示数字呢 小明想了一个方法如下: 1 -> A 2 -> B 3 -> C .... 25 -> Y 26 -> Z 27 -& ...

  5. LeetCode(77):组合

    Medium! 题目描述: 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3] ...

  6. 【python】kafka在与celery和gevent连用时遇到的问题

    前提:kafka有同步,多线程,gevent异步和rdkafka异步四种模式.但是在与celery和gevent连用的时候,有的模式会出错. 下面是我代码运行的结果. 结论:使用多线程方式! 使用同步 ...

  7. PHP实现动态获取函数参数的方法

    1. func_num_args — 返回传入函数的参数总个数 int func_num_args ( void ) 示例 <?php function demo () { $numargs = ...

  8. java Swing组件和事件处理

    1.常见的容器 JComponent是 Container 的子类,中间容器必须添加到底层容器中才能够发挥作用, JPanel 面板 :使用jPanel 创建一个面板,再通过添加组件到该面板上面,JP ...

  9. 20165314 2016-2017-2 《Java程序设计》第8周学习总结

    20165314 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 java中的线程 线程的常用方法 GUI线程 多线程的概念 代码托管

  10. yslow V2 准则详细讲解

    主要有12条:   1. Make fewer HTTP requests 尽可能少的http请求..我们有141个请求(其中15个JS请求,3个CSS请求,47个CSS background ima ...