题意:

  给出每个男的心目中的女神排序,给出每个女的心目中的男神排序,即两个n*n的矩阵,一旦任意两个非舞伴的男女同学觉得对方都比现任舞伴要好,他们就会抛弃舞伴而在一起。为了杜绝这种现象,求每个男的最后所搭配的女伴是谁。

思路:  

  怎么感觉题意有点问题,输出的是第i行的男人所搭配的女人,即输出的是女人!

  每个男人依次选择最喜欢的女人求婚,若同一个女的没人抢,则临时抢亲成功,若需要抢,明显女的都是喜欢挑长腿oba啦,矮冬瓜自动加入单身狗队列继续求婚!当单身狗所求的女神已订婚,只要女神更爱单身狗,没有什么可以阻挡他们,女神果断抛弃未婚夫,未婚夫加入单身狗队列。直至地球上没有单身狗为止!

  复杂度O(n2),每个男的最多只会向n个女的都求婚一次,而女的没有选择权,只有接受和拒绝。著名的Gale-Shapley算法。

 #include <bits/stdc++.h>
#define max(X,Y) ((X) > (Y) ? (X) : (Y))
#define min(X,Y) ((X) < (Y) ? (X) : (Y))
#define pii pair<int,int>
#define INF 0x7f7f7f7f
#define LL long long
using namespace std;
const int N=; deque<int> que[N]; //心目中的女神排名队列
int girl[N], boy[N];
int imp[N][N]; int cal(int n)
{
memset(girl, , sizeof(girl) );
deque<int> single;
for(int i=; i<=n; i++) single.push_back(i); while(!single.empty())
{
int x=single.front(); single.pop_front(); //取出单身狗
int op=que[x].front(); que[x].pop_front(); //取出x的暗恋对象 if(!girl[op]) girl[op]=x,boy[x]=op; //女神初恋
else if( imp[op][x] < imp[op][girl[op]] ) //女神抛弃现任
{
single.push_back(girl[op]);
girl[op]=x;
boy[x]=op;
}
else single.push_back(x); //单身狗被拒绝
}
for(int i=; i<=n; i++) printf("%d\n",boy[i]);
} int main()
{
//freopen("input.txt", "r", stdin);
int t, n, b, j=;
cin>>t;
while(t--)
{
if(j) printf("\n");
j++;
scanf("%d", &n);
for(int i=; i<=n; i++)
{
que[i].clear();
for(int j=; j<=n; j++)
{
scanf("%d",&b);
que[i].push_back(b);
}
}
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
scanf("%d",&b);
imp[i][b]=j; //b对于i来说,排在第几。
}
} cal(n);
}
return ;
}

AC代码

  

UVA 1175 Ladies' Choice 女士的选择(稳定婚姻问题,GS算法)的更多相关文章

  1. UVA 1175 - Ladies' Choice

    1175 - Ladies' Choice 链接 稳定婚姻问题. 代码: #include<bits/stdc++.h> using namespace std; typedef long ...

  2. UVA 1175 Ladies' Choice 稳定婚姻问题

    题目链接: 题目 Ladies' Choice Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu 问题 ...

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

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

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

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

  5. UVALive 3989 Ladies' Choice(稳定婚姻问题:稳定匹配、合作博弈)

    题意:男女各n人,进行婚配,对于每个人来说,所有异性都存在优先次序,即最喜欢某人,其次喜欢某人...输出一个稳定婚配方案.所谓稳定,就是指未结婚的一对异性,彼此喜欢对方的程度都胜过自己的另一半,那么这 ...

  6. 【LA 3989 训练指南】女士的选择 【稳定婚姻问题】

    我们先来学一下稳定婚姻问题 什么是稳定婚姻问题? 有n个女士和n个男士,他们要一一进行配对.每个男士心中对这n个女士都有一个排名,同理,每个女士心里对n个男性也有一个排名.我们要做的是,在他们配对完成 ...

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

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

  8. UVALive-3989 Ladies' Choice (稳定婚姻问题)

    题目大意:稳定婚姻问题.... 题目分析:模板题. 代码如下: # include<iostream> # include<cstdio> # include<queue ...

  9. UVALive 3989 Ladies' Choice

    Ladies' Choice Time Limit: 6000ms Memory Limit: 131072KB This problem will be judged on UVALive. Ori ...

随机推荐

  1. python搭建httpserver

    因为手机要下载电脑上的文件,使用手机助手什么的经常出没反应,于是网上查了下,直接使用python搭建简单的HTTP服务器,之后在其运行目录下扔文件就行了.浏览器访问时可以直接显示相关的文件列表.参考了 ...

  2. 书写优雅的shell脚本(二)- `dirname $0`

    在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". 这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个 ...

  3. 深入理解dispatch_sync

    关于GCD的基础知识,之前写过一篇博客,详见GCD基础知识.虽然之前已经梳理过了,但对很多知识点的理解仍然不够透彻…写这篇博客的原因是在阅读AFNetworking代码时遇到一些奇怪的代码. 如下: ...

  4. servlet中的servletURL,servletURI和servletPath

    String    servletURL=request.getservletURL(); url:站点名+当前web应用名+(目录名)+页面名 String    servletURI=reques ...

  5. C++对象的复制——具有指针成员的类的对象的复制

    //smartvessel@gmail.com class Table{ Name * p; size_t sz; publish: Table(size_t s = 15){p = new Name ...

  6. ubuntu设置里面怎么少了好多设置了比如桌面背景

    哈哈  我也是醉了  这个虚拟机真的不好对付 解决办法:sudo apt-get install unity-control-center          ok!

  7. iView 实战系列教程(21课时)_汇总贴

    iView 实战系列教程(21课时)_汇总贴 课程地址; https://segmentfault.com/ls/1650000016424063 iView 实战系列教程(21课时)_1.iView ...

  8. k-means 算法介绍

    概述 聚类属于机器学习的无监督学习,在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好.它跟分类的最主要区别就在于有没有“标签”.比如说我们有一组数据,数 ...

  9. rn滑动返回页面监听

    开发rn的同学都已经知道这个问题很坑了,真的很难弄,网上的方法尝试过很多,返回的的时候回调,是用的最多的,最开始我也是用的这种方式,但是滑动返回的时候监听不到.并且用起来也比较麻烦,不但需要在当前页面 ...

  10. bzoj 3796: Mushroom追妹纸【二分+后缀数组+st表】

    把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后 ...