题目链接

稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度。给每个人选择配偶。

若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完备匹配,则称这是一个稳定匹配。

稳定匹配一定存在,且存在一个\(O(n^2)\)的算法:

任选一个未匹配的男生x,按x的喜爱程度从大到小枚举每个女生,若当前女生没有配偶或喜欢x胜过喜欢当前配偶,则与x匹配。直到所有男生都匹配。

这一题我们用行表示男生,n个数表示女生。喜爱程度为:行更喜欢靠前的数,数更喜欢其出现位置靠后的行。

eg.如果x这一行靠后的一些数都被选过了,让它们喜欢x,要不产生矛盾则要x喜欢(选)尽量靠前的数。

复杂度\(O(nm)\)。

为何rank1这么容易。。

  1. //107ms 2028kb
  2. #include <queue>
  3. #include <cstdio>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <algorithm>
  7. //#define gc() getchar()
  8. #define MAXIN 500000
  9. #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  10. const int N=205,M=405;
  11. int A[N][M],pos[N][N],lk[N],ans[N];
  12. std::queue<int> q;
  13. char IN[MAXIN],*SS=IN,*TT=IN;
  14. inline int read()
  15. {
  16. int now=0;register char c=gc();
  17. for(;!isdigit(c);c=gc());
  18. for(;isdigit(c);now=now*10+c-'0',c=gc());
  19. return now;
  20. }
  21. int main()
  22. {
  23. for(int T=read(),n,m; T--; )
  24. {
  25. n=read(), m=read();
  26. for(int i=1; i<=n; ++i)
  27. for(int j=1; j<=m; ++j)
  28. pos[i][A[i][j]=read()]=j;
  29. memset(lk,0,sizeof lk);
  30. for(int i=1; i<=n; ++i) q.push(i);
  31. while(!q.empty())
  32. {
  33. int x=q.front(); q.pop();
  34. ans[x]=0;
  35. for(int i=1,v; i<=m; ++i)
  36. if(v=A[x][i])
  37. {
  38. if(!lk[v]) {lk[v]=x, ans[x]=v; break;}
  39. else if(pos[x][v]>pos[lk[v]][v])
  40. {
  41. q.push(lk[v]), lk[v]=x, ans[x]=v;
  42. break;
  43. }
  44. }
  45. }
  46. for(int i=1; i<=n; ++i) printf("%d ",ans[i]); putchar('\n');
  47. }
  48. return 0;
  49. }

UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)的更多相关文章

  1. [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)

    3816: 矩阵变换 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 803  Solved: 578[Submit][Status][Discuss] ...

  2. bzoj 3816&&uoj #41. [清华集训2014]矩阵变换

    稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...

  3. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  4. uoj 41 【清华集训2014】矩阵变换 婚姻稳定问题

    [清华集训2014]矩阵变换 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/41 Description 给出 ...

  5. AC日记——【清华集训2014】奇数国 uoj 38

    #38. [清华集训2014]奇数国 思路: 题目中的number与product不想冲: 即为number与product互素: 所以,求phi(product)即可: 除一个数等同于在模的意义下乘 ...

  6. [UOJ#274][清华集训2016]温暖会指引我们前行

    [UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...

  7. [UOJ 41]【清华集训2014】矩阵变换

    Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...

  8. 【BZOJ3816】【清华集训2014】矩阵变换 稳定婚姻问题

    题目描述 给出一个\(n\)行\(m\)列的矩阵\(A\), 保证满足以下性质: 1.\(m>n\). 2.矩阵中每个数都是\([0,n]\)中的自然数. 3.每行中,\([1,n]\)中每个自 ...

  9. [清华集训2015 Day2]矩阵变换-[稳定婚姻模型]

    Description 给出一个N行M列的矩阵,保证满足以下性质: M>N. 矩阵中每个数都是 [0,N]中的自然数. 每行中, [1,N]中每个自然数刚好出现一次,其余的都是0. 每列中,[1 ...

随机推荐

  1. 8 Productivity hacks for Data Scientists & Business Analysts

    8 Productivity hacks for Data Scientists & Business Analysts Introduction I was catching up with ...

  2. 读书笔记:《思考的乐趣:Matrix67数学笔记》第4章 统计数据的陷阱

    <思考的乐趣:Matrix67数学笔记>第4章讲了几个统计学上的陷阱,由于现在流行的大数据与统计学很有渊源,所以认真读了这一章,在<大数据时代>中指出只考虑相关性就够了,而不考 ...

  3. 赫夫曼树JAVA实现及分析

    一,介绍 1)构造赫夫曼树的算法是一个贪心算法,贪心的地方在于:总是选取当前频率(权值)最低的两个结点来进行合并,构造新结点. 2)使用最小堆来选取频率最小的节点,有助于提高算法效率,因为要选频率最低 ...

  4. jQuery下实现等待指定元素加载完毕

    先声明下这个方法的使用场合,以免误导大家..比如在博客园,我们没法修改他的源代码,那么只能想办法监视元素的出现了.所以下面方法是在修改不了源码的情况下使用,而非写自己的项目.. 今天在改博客几个样式的 ...

  5. 20155201 2016-2017-2 《Java程序设计》第五周学习总结

    20155201 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 异常处理 程序设计本身的错误,建议使用Exception或其子类实例来表现,称错误处 ...

  6. java学习第04天(语句、函数、数组)

    (3)循环结构 格式: for(初始化表达式,循环条件表达式,循环后的操作变大时){ 执行语句,循环体: } 注: a. for循环里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真 ...

  7. bzoj3029 守卫者的挑战 (多维dp)

    题面: 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我,Nizem,是黑魔法圣殿的守卫者.如果你能通过我的挑 ...

  8. Python人工智能之路 - 第一篇 : 你得会点儿Python基础

    Python 号称是最接近人工智能的语言,因为它的动态便捷性和灵活的三方扩展,成就了它在人工智能领域的丰碑 走进Python,靠近人工智能 一.编程语言Python的基础 之 "浅入浅出&q ...

  9. vue路由DEMO

    index.js,index.vue,course.vue,master.vue等 import Vue from 'vue' import Router from 'vue-router' impo ...

  10. list(列表)操作【五】

    L表示从左边(头部)开始插与弹出,R表示从右边(尾部)开始插与弹出. 一.概述:      在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(l ...