题意:

      给你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. Shell编程中变量用法

    1. 变量替换 语法 说明 ${变量名#匹配规则} 从变量开头进行规则匹配,将符合最短的数据删除 ${变量名##匹配规则} 从变量开头进行规则匹配,将符合最长的数据删除,贪婪匹配 ${变量名%匹配规则 ...

  2. Selenium 4.0beta:读源码学习新功能

    Selenium 4 源码分析 这一篇文章我们来分析Selenium 4 python版源码. 除非你对Selenium 3的源码烂熟于心,否则通过对比工具分析更容易看出Selenium 4更新了哪些 ...

  3. POJ_1227 Jack Straws 【二维平面判两线段相交】

    一 题面 POJ1127 二 分析 在平面几何中,判断两线段相交的方法一般是使用跨立实验.但是这题考虑了非严格相交,即如何两个线段刚好端点相交则也是相交的,所以还需要使用快速排斥实验. 这里参考并引用 ...

  4. BZOJ_2243 [SDOI2011]染色 【树链剖分+线段树】

    一 题目 [SDOI2011]染色 二 分析 感觉树链剖分的这些题真的蛮考验码力的,自己的码力还是不够啊!o(╯□╰)o 还是比较常规的树链剖分,但是一定记得这里的线段树在查询的时候一定要考虑链于链相 ...

  5. css盒布局-省份选择盘的实现

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  6. python学习9 函数的基础知识

    1.函数的定义 def  func(): 2.函数的调用 func() 3.函数的返回值 #1.没有返回值 # (1)不写return # (2)只写return后面的代码不在继续执行,返回空,代表结 ...

  7. 13、Spring教程之全部(包括所有章节)

    Spring 教程 1.Spring概述 简介 Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. ...

  8. python多版本与虚拟环境

    这篇纯python技术文章,我自己平时也会用到,在此记录一下. 为什么会用到多个Python版本? 用macOS和Ubutntu的同学都知道系统默认安装的Python2.7.x,然后,我们平时pyth ...

  9. java例题_41 利用递归给猴子分桃

    1 /*41 [程序 41 猴子分桃] 2 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把 3 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均 ...

  10. FFMPEG编译问题记录

    一.ffmpeg下载与配置 下载地址 FFmpeg/FFmpeg (https://github.com/FFmpeg/FFmpeg) ~$ git clone https://github.com/ ...