我们先来学一下稳定婚姻问题

什么是稳定婚姻问题?

有n个女士和n个男士,他们要一一进行配对。每个男士心中对这n个女士都有一个排名,同理,每个女士心里对n个男性也有一个排名。我们要做的是,在他们配对完成以后,不存在以下这种情况:女士a和男士b进行了配对,但是女士c在男士b心里的排名要高于a,而且男士b在女士c心里的排名也高于女士c当前的伴侣,因为如果出现这种情况男士b和女士c很有可能抛下现在的配对对象而“出轨”。同理女士a也不存在一个男士d,条件也是如此。

我们有一个专门的算法来解决这个问题。算法的大致过程就是男士不断地求婚,而女士不断地拒绝的过程。

在每一轮中,每个单身的男人在没有拒绝过他的女士中找到一个在他心里排名最高的女士进行表白,然后被表白的女士如果此时是单身,那么就会先接受这个男士的表白,暂时和他配对。如果这个女士已经有配对的对象,那么此时这个女士就会比较现在这个向她表白的男士和她现在的配对对象谁再她心里的排名更高,然后她会选择排名更高的那一个拒绝掉另一个。

然后我们再来看这道【LA3989】

在一个盛大的校园舞会上有n位男生和n位女生,每个人都对每个异性有一个排序,代表对他们的喜欢程度。你的任务是将男生和女生一一配对(每个人恰好有一个舞伴),使得男生u和女士v不存在以下情况 1.男生u和女生v不是舞伴;2.他们喜欢对方的程度都大于喜欢各自自己当前舞伴的程度。如果出现了2中的情况,他们可能会擅自抛下自己的舞伴,另外组成一对。

你的任务是对于每个女生,在所有可能和她跳舞的男生中,找出她最喜欢的那个。

这个题就是稳定婚姻问题的模板题了,直接套我们上面的模板的方法就可以。

code from LRJ

 #include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue> using namespace std; const int maxn=+;
int pref[maxn][maxn],order[maxn][maxn],Next[maxn];
int future_husband[maxn],future_wife[maxn];
queue<int>q;
void engage(int man,int woman){
int m=future_husband[woman];
if(m){
future_wife[m]=;
q.push(m);
}
future_wife[man]=woman;
future_husband[woman]=man;
} int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
scanf("%d",&pref[i][j]);//编号为i的男士第j喜欢的人
Next[i]=; //接下来应该向排名为1的女士求婚
future_wife[i]=; //没有未婚妻
q.push(i);
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
int x;
scanf("%d",&x);
order[i][x]=j; //在编号为i的女士心目中,编号为x的男性的排名
}
future_husband[i]=; //没有未婚夫
}
while(!q.empty()){
int man=q.front();q.pop();
int woman=pref[man][Next[man]++];//下一个求婚对象
if(!future_husband[woman])
engage(man,woman);
else if(order[woman][man]<order[woman][future_husband[woman]])
engage(man,woman);
else q.push(man);
}
while(!q.empty())q.pop();
for(int i=;i<=n;i++) printf("%d\n",future_wife[i]);
if(T)printf("\n");
}
return ;
}

【LA 3989 训练指南】女士的选择 【稳定婚姻问题】的更多相关文章

  1. 训练指南 UVALive - 3989(稳定婚姻问题)

    ayout: post title: 训练指南 UVALive - 3989(稳定婚姻问题) author: "luowentaoaa" catalog: true mathjax ...

  2. LA 3989 - Ladies' Choice 稳定婚姻问题

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

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

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

  4. Ladies' Choice UVALive - 3989 稳定婚姻问题 gale_shapley算法

    /** 题目: Ladies' Choice UVALive - 3989 链接:https://vjudge.net/problem/UVALive-3989 题意:稳定婚姻问题 思路: gale_ ...

  5. 训练指南 UVALive - 5713(最小生成树 + 次小生成树)

    layout: post title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树) author: "luowentaoaa" catalog: true ...

  6. LA3989女士的选择

    题意:       给你n个男士n个女士,然后给你每个男士中女士的排名,和每个女士中每个男士在他们心中的排名,问你是否可以组成稳定的舞伴,如果存在以下情况(1)男生u和女生v不是舞伴,他们喜欢对方的程 ...

  7. poj 1961 Period(KMP训练指南例题)

    Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 11356   Accepted: 5279 Descripti ...

  8. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

  9. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

随机推荐

  1. drone 学习五 集成gitlab 配置以及简单测试

    备注: 使用docker-compose  进行安装 同时集成gitlab,预备环境 docker  docker-compose  gitlab 1. docker-compose version: ...

  2. 【转】深入 Python :Dive Into Python 中文版

    原文网址:http://woodpecker.org.cn/diveintopython/power_of_introspection/lambda_functions.html 4.7. 使用 la ...

  3. Hadoop的简单序列化框架

    Hadoop提供了一个加单的序列化框架API,用于集成各种序列化实现.该框架由Serialization实现. 其中Serialization是一个接口,使用抽象工厂的设计模式,提供了一系列和序列化相 ...

  4. saiku3.8二次开发项目搭建(非maven)

    参考文章:http://blog.csdn.net/gsying1474/article/details/51603535 本文大部分参考了上面的博文,这里只是做一个记录,由于本人maven能力有限, ...

  5. VS2003在vista/win7下搜索会出现僵死

    1.  VS2003在vista下搜索关键词的时候会出现僵死的问题的解决方案: VS2003快捷方式右击选中属性->兼容性页签 : 选中用兼容模式运行这个程序,下拉框中用windows xp2 ...

  6. jq form表单自动赋值

    (function ($) { $.fn.extend({ initForm: function (options) { //默认参数 var defaults = { formdata: " ...

  7. Tomcat 8.5 架构分析

    官方文档:Apache Tomcat 8 Architecture 以下分析的是 Version 8.5. Tomcat 组件关系图 根据 Architecture Overview 绘制: Serv ...

  8. H3C V7版本的系统默认权限

    H3C (v7平台)Console口通过账号密码登陆配置教程 http://www.023wg.com/h3c/496.html H3C (v7平台)Console口通过账号密码登陆配置教程 看不懂的 ...

  9. 如何实现session共享

    http://www.cnblogs.com/xiehuiqi220/p/3592300.html 首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话 ...

  10. Fiddler监控面板显示Server栏(Fiddler v5.0)

    1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.去掉 UI.lvSessions.AddBoundColumn("Server ...