题意:

      给你n个男士n个女士,然后给你每个男士中女士的排名,和每个女士中每个男士在他们心中的排名,问你是否可以组成稳定的舞伴,如果存在以下情况(1)男生u和女生v不是舞伴,他们喜欢对方的程度都大于各自当前舞伴的程度,他们就可能抛弃自己现在的舞伴,这样的话匹配就不是稳定的。输出稳定的时候每个男生所匹配的女生。

思路:

      哎!本来就是一个最基本的稳定婚姻问题,输入输出的地方被白书翻译出翔了,我C,弄的我怎么敲都过不去,后来看了下白书的代码发现他是先输出男生心目中女生的排名,而他前面说的却不是这个,改了之后还是不过,后来又接着往下看,发现输出的是男生的结果,不是女生,就是一个输入输出整的调了好久,本来我的模板就是我自己写的,还以为是自己的模板写错了。

上面说了那么多废话,下面来说下稳定婚姻问题的思想吧,首先稳定婚姻问题是必然有唯一解的,至于为什么,这个可以去网上找详细证明,如果不想证明,我们可以想一下每个人心中都对所有人排名了,如果剩下一个女生,那么必定会剩下一个男生,所谓剩下的就是他们不能再追求得上自己更喜欢的了,最后就剩他两个了,直接匹配上也是稳定的。对于算法的过程是这样的,我们先把所有男生都扔进队列,队列里的就表示当前没有找到对象的男生,然后男生一个一个的从队列出来,出来后从自己最喜欢的女生开始一个一个访问,如果这个女生当前没有对象,那么直接匹配上,如果有的话就看看是不是自己在那个女生心中的地位比她当前的对象好,如果好,那么直接匹配,那个女生之前的对象将被扔回单身队列,就这样一直到单身队列为空就完事了,算法整体上看感觉男生很可怜,很容易被女生直接扔回去,其实女生更可怜,没有自己的主动权,只能是等着选他的男生中选一个最好的,自己最喜欢的男生可能永远不会去选择他,呵呵,感觉算法比较搞笑....

#include<stdio.h>

#include<string.h>

#include<queue>

#define N 1000 + 10

using namespace std;

int map[N][N] ,sc[N][N];

int mark[N][N];

int nowb[N] ,nowg[N];

void Marry(int n)

{

   queue<int>q;

   for(int i = 1 ;i <= n ;i++) 

   q.push(i);

   memset(nowb ,255 ,sizeof(nowb));

   memset(nowg ,255 ,sizeof(nowg));

   memset(mark ,0 ,sizeof(mark));

   while(!q.empty())

   {

      int xin ,tou;

      tou = q.front();

      q.pop();

      for(int i = 1 ;i <= n ;i ++)

      {

         xin = map[tou][i];

         if(mark[tou][xin]) continue;

         mark[tou][xin] = 1;

         if(nowg[xin] == -1)

         {

             nowg[xin] = tou;

             nowb[tou] = xin;

             break;

         }

         else if(sc[xin][tou] > sc[xin][nowg[xin]])

         {

             q.push(nowg[xin]);

             nowg[xin] = tou;

             nowb[tou] = xin;

             break;

         }

       }

   }

}

 

int main ()

{

    int t ,n ,i ,j ,a;

    scanf("%d" ,&t);

    while(t--)

    {

        scanf("%d" ,&n);

        for(i = 1 ;i <= n ;i ++)

        for(j = 1 ;j <= n ;j ++)

        scanf("%d" ,&map[i][j]); 

        for(i = 1 ;i <= n ;i ++)

        {

           for(j = 1 ;j <= n ;j ++)

           {

              scanf("%d" ,&a);

              sc[i][a] = n - j + 1;

           }

        }

        Marry(n);

        for(i = 1 ;i <= n ;i ++)

        printf("%d\n" ,nowb[i]);

        if(t) puts("");

    }

    return 0;

}       

               

              

          

LA3989女士的选择的更多相关文章

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

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

  2. UVA 1175 Ladies' Choice 女士的选择(稳定婚姻问题,GS算法)

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

  3. C#语句1:选择语句二(switch break)

    (二)switch case switch case 必须与 break 一同使用.break是跳转语句.与switch case连用的时候是跳出最近的{}. 注: ●若case后面接收的是字符串类型 ...

  4. 用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    当选择了外贸这条路,那就是选择了跟外国人做生意.那面对全球这么大的市场究竟选什么样的产品才干脱颖而出?什么样的产品才是全球卖家喜欢的呢?什么样的产品才干让自己財源滚滚?我想这都是全部刚開始外贸创业的人 ...

  5. 女士品茶 | The Lady Tasting Tea | 统计学史

    The Lady Tasting Tea - How Statistics Revolutionized Science in the Twentieth Century 本书只讨论了20世纪这100 ...

  6. J.K.罗琳女士---《失败的好处和想象的重要性》

    目录 sohu ruanyifeng web sohu http://www.sohu.com/a/166181502_467718 <哈利波特>的作者J.K.罗琳女士在出席一次哈佛大学的 ...

  7. 知识管理——得到CEO脱不花女士的一次分享

    知识管理--得到CEO脱不花女士的一次分享 近日,公司举办了一场"CKO首席知识官"研讨会,邀请到了得到APP的CEO脱不花女士做了一场精彩的分享,让我深受启发. 分享内容围绕3个 ...

  8. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

  9. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

随机推荐

  1. AJAX 相关参数详细说明

    最近ajax的使用十分频繁,对其许多参数还不是很了解,特此总结. 通用写法 1 $.ajax({ 2 url: "http://www.hzhuti.com", //请求的url地 ...

  2. Elasticsearch 为了搜索

    前言 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库--无论是开源还是 ...

  3. Flask-SQLAlchemy使用

    Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展. 官方文档:https://flask-sqlalchemy.palletsprojects.c ...

  4. 14. vue源码入口+项目结构分析

    一. vue源码 我们安装好vue以后, 如何了解vue的的代码结构, 从哪里下手呢? 1.1. vue源码入口 vue的入口是package.json 来分别看看是什么含义 dependences: ...

  5. .NET并发编程-任务函数并行

    本系列学习在.NET中的并发并行编程模式,实战技巧 请问普通: 被门夹过的核桃还能补脑吗 本小节开始学习基于任务的函数式并行.本系列保证最少代码呈现量,虽然talk is cheap, show me ...

  6. 设计模式之建造者模式(BuilderPattern)

    一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦.采用 ...

  7. lms框架即将发布第一个版本了

    lms微服务框架介绍 LMS框架旨在帮助开发者在.net平台下,通过简单的配置和代码即可快速的使用微服务进行开发. LMS通过.net框架的主机托管应用,内部通过dotnetty/SpanNetty实 ...

  8. 【MCU】移植AT32库&FreeRTOS教程

    目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...

  9. DAOS 分布式异步对象存储|事务模型

    DAOS API 支持分布式事务,允许将针对属于同一 Container 的对象的任何更新操作组合到单个 ACID 事务中.分布式一致性是通过基于多版本时间戳排序的无锁乐观并发控制机制提供的.DAOS ...

  10. 前端学习 node 快速入门 系列 —— 报名系统 - [express]

    其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...