Gale-Shapley

#include <bits/stdc++.h>
using namespace std;
queue<int> dog,like[1005];
int rec[1005][1005],hus[1005],wif[1005];
bool marry(int woman,int man){
	if(!hus[woman]){
		hus[woman]=man;
		wif[man]=woman;
		return true;
	}
	if(rec[woman][hus[woman]]<rec[woman][man]){
		dog.push(hus[woman]);
		wif[hus[woman]]=0;
		hus[woman]=man;
		wif[man]=woman;
		return true;
	}
	return false;
}
void solve(){
	while(!dog.empty()){
	int a=dog.front();
		while(!marry(like[a].front(),a))like[a].pop();
		dog.pop();
	}
}
int main(){
int T;
	ios::sync_with_stdio(false);
	cin>>T;
	while(T--){
	int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			while(!like[i].empty())like[i].pop();
			for(int j=1;j<=n;j++){
				int a;
				cin>>a;
				like[i].push(a);
			}
		}
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++){
				int a;
				cin>>a;
				rec[i][a]=n-j+1;
			}
		for(int i=1;i<=n;i++)
			dog.push(i);
		solve();
		for(int i=1;i<=n;i++)
			cout<<wif[i]<<endl;
		}
	return 0;
}

  

时间: 2024-10-11 21:14:58

Gale-Shapley的相关文章

OSChina娱乐弹弹弹——离散数学之把妹要诀 ,你学会了吗?

哈哈,今天是慌张的周日,明天就是周一啦- 周末大家也不要忘记学习哦,现在,我们来复习一下离散数学吧- 顺便从中参透一下把妹技巧,程序猿的女朋友将不是梦! 离散数学课(CSCI2110)上,讲到一个有趣的问题. 假设有五个男生,五个女生,每个人都在自己心中对五个异性有一定的preference排序,比如: 以上的排序表解读为:男生1最中意女生C,次中意女生B,次次中意女生E.... 以此类推.... 在五男五女全部成功脱光之后(假设都在圈子内部解决),定义一个unstablematching为:如

Stable Matching 稳定匹配 婚姻算法 shapley 算法

作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051286.html 稳定匹配问题:有N男N女,每个人对于异性都一个排名,先需要得到一种稳定的匹配,即不会出现一个匹配中的人与另一个匹配中的异性对对方的排名均高于目前配对的人的排名. shapley算法: 每次取出一个单身男生,让他向没有拒绝过她的女生中其排名最高人表白,若该女生没有对象则配对成功,否则与其当前的对象排名进行对比,如果当前对象排名较高,则拒绝表白男生,否则dump掉目前对

Stable Matching (Gale Sharpley Algorithm)

以下为数据生成函数,生成boys_rankings.txt 和 girls_rankings.txt #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <sstream> #include <algorithm> #include <vector> #inc

Stable Matching Problem

The Stable Matching Problem originated, in part, in 1962, when David Gale and Lloyd Shapley, two mathematical economists, asked the question: Could one design a college admissions process, or a job recruiting process, that was self-enforcing? What di

(算法)稳定婚姻匹配

题目: 婚介所登记了N位男孩和N位女孩,每个男孩都对N个女孩的喜欢程度做了排序,每个女孩都对N个男孩的喜欢程度做了排序,你作为月老,能否给出稳定的牵手方案? 稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的. 思路: 1962 年,美国数学家 David Gale 和 Lloyd Shapley 发明了一种寻找稳定婚姻的策略.不管男女各有多少人,不管他们各自的偏好如何,应用这种策略后总能得到一个稳定的婚

稳定婚姻问题和Gale-Shapley算法(转)

什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心中的排名,你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”.这虽然很完美,但绝大多数情况下都不可能实现.比方说,男1号最喜欢的是女1号,而女1号的最爱不是男1号,这两个人的最佳选择就不可能被同时满足.如果好几个男孩儿最喜欢的都是同一个女孩儿,这

婚姻算法笔记

婚姻算法 曾经有想过类似的问题,婚姻算法中是关于情侣,我想的也是关于情侣方面.当时的想法是:如果每个人都将自己喜欢的人排出个名次列出,供别人参考,不就少了很多失败的表白和示爱吗.男生可以看在女生的排名中的名次来决定追不追.但只想到这里就结束了,没有想过当工作集从单链变成环时应该如何让每个人幸福. 婚姻算法是由Gale和Shapley提出,不考虑版本是雇主和员工还是男女情侣,现在我们只讨论男女情侣,讨论另外一种也可以,其中包含的条件都是相似的.要在已知每个人喜好排名的情况下,安排出匹配.使得婚姻稳

奋斗吧,程序员——第三十一章 寂寞空庭春欲晚,梨花满地不开门

全世界不理解我都没关系的,我一向不屑解释.只是不理解自己的那个人,为什么是你? 我知道你已经头也不回地离开,一如很多年之前那些朋友们. 我们都年轻,谁都有资格把幸福写得源远流长,只是这样美丽的错肩,在很多年后回忆起来,是不是一如当初的苦涩呢? 我一直在用力回忆,但至少我在想着这些事情的时候是不孤独的,就好像你从来没从我身边离开一样.我听到你喊我的那一声,大哥. 有一天甚至梦到自己变成了一条狗,在妹妹和她男朋友吃着同一个碗里的饭的时候,屁颠屁颠跑过去,然后妹妹喂我一口,妹夫喂我一口,这个梦太逗了,

稳定婚姻模型

原文地址:https://blog.csdn.net/qq_33913037/article/details/71328099 假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(1),你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的"第一选择".这虽然很完美,但绝大多数情况下都不可能实现.比方说,男 1 号的最爱是女 1 号,而女 1 号的最爱不是男

zjuoj 3608 Signal Detection

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3608 Signal Detection Time Limit: 2 Seconds      Memory Limit: 65536 KB Parallelepiped Type Prism Faces 6 parallelograms Edges 12 Vertices 8 Dr. Gale is testing his laser system. He uses a