<题目链接>

题目大意:

给你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. Ubuntu16.04配置Tomcat的80端口访问

    [问题描述] 在阿里云 ECS 服务器 Ubuntu16.04 下部署 Java Web 应用时,发现配置的 Tomcat 服务启动后 80 端口无法被监听. [问题原因] 出现该问题的主要原因是:非 ...

  2. Confluence 6 数据中心的缓存

    在 Confluence 数据中心(集群)你需要分布缓存和每一个节点的缓存.在集群管理界面,将会定义分布缓存和节点本地缓存. 缓存配置文件存储在集群共享目录中的 home 目录下面. https:// ...

  3. Confluence 6 的系统配置信息的示例

    awt.toolkit sun.awt.X11.XToolkit file.encoding.pkg sun.io java.specification.version 1.8 sun.cpu.isa ...

  4. ionic3 使用html2canvas将数据导出为图片,并下载本地

    1.安装html2canvas npm install --save html2canvas 官方网站 https://html2canvas.hertzen.com/ 2.在需要的组件中引入html ...

  5. 判断ie浏览器7、8、9三个版本

    判断ie浏览器7.8.9三个版本   上午的时候,本来是想做一个position:fixed在各个浏览器下兼容的方案的,但是发现ie7/8下面的position:fixed只支持一个屏幕,如果内容高度 ...

  6. Coding配合git使用时遇到的问题

    转载整理: https://www.jianshu.com/p/b23cd00cffa6 https://www.cnblogs.com/yidoucai/p/5228763.html https:/ ...

  7. linux 系统备份和恢复

    Linux不像windows,它不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中. 使用root用户切换到根目录 然后,使用下面的命令备份完整的系统: tar c ...

  8. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

    1.启动hive的时候出现这个问题,报错如下所示: [hadoop@slaver1 conf]$ hive Logging initialized -cdh5.-cdh5.3.6.jar!/hive- ...

  9. UE4 ShooterGame Demo的开火的代码

    之前一直没搞懂按下鼠标左键开火之后,代码的逻辑是怎么走的,今天看懂了之前没看懂的部分,进了一步 ShooterCharacter.cpp void AShooterCharacter::OnStart ...

  10. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...