题意:

      给你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. C++的标识符的作用域与可见性

    下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...

  2. .net 开源模板引擎jntemplate 实战演习:基础篇之入门

    一.简介 模板引擎是Web开发中非常重要的一环,它负责将页面上的动态内容呈现出最终的结果展现给前端用户,在asp.net mvc中,我们最熟悉的就是Razor了,作为官方的视图引擎(视图引擎不等同于模 ...

  3. 六. SpringCloud网关

    1. Gateway概述 1.1 Gateway是什么 服务网关还可以用Zuul网关,但是Zuul网关由于一些维护问题,所以这里我们学习Gateway网关,SpringCloud全家桶里有个很重要的组 ...

  4. PAT-1154(Vertex Coloring )+map使用+vector建图+set的使用

    Vertex Coloring PAT-1154 #include<iostream> #include<cstring> #include<string> #in ...

  5. Go中定时器实现原理及源码解析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的go的源码15.7,需要注意的是由于timer是1.14版本进行改版,但是1. ...

  6. FreeBSD jail 折腾记(一)

    创建jail目录 mkdir -p /usr/jail/ 放入基本系统 方案一 make buildworld #编译基本系统 make installworld DESTDIR=/usr/jail/ ...

  7. HDU_5414 CRB and String 【字符串】

    一.题目 CRB and String 二.分析 对于这题,读懂题意非常重要. 题目的意思是在$s$的基础上,按题目中所描述的步骤,即在$s$中任意选择一个字符$c$,在这个字符后面添加一个不等于$c ...

  8. 在CentOS上安装Nginx配置HTTPS并设置系统服务和开机启动(最全教程)

    友情提示:全部配完大约需要20分钟,本教程配合 xshell 和 xftp 使用更佳. 系统配置:CentOS 7.5 本教程 摘繁华 版权所有. 操作按键 常用按键: 复制操作:Shift+Ins ...

  9. 一个操作 cookie 的原生方法 cookieStore

    我们平时对 cookie 的增删改查等操作,都是在操作 document.cookie,这里我们介绍一个新方法cookieStore. 1. 平时如何操作 cookie document.cookie ...

  10. PTA 将数组中的数逆序存放

    7-1 将数组中的数逆序存放 (20 分)   本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素. 输入格式: 输入在第一行中给出一个正整数n(1). ...