UVALive 3989 Ladies' Choice
来源:互联网 发布:数控机床圆弧编程 编辑:程序博客网 时间:2024/04/27 14:03
经典的稳定婚姻匹配问题
[Submit] [Go Back] [Status]
Description
Problem I – LadiesÕ Choice
Background
Teenagers from the local high school have asked you to help them with the organization of next yearÕs Prom. The idea is to find a suitable date for everyone in the class in a fair and civilized way. So, they have organized a web site where all students, boys and girls, state their preferences among the class members, by ordering all the possible candidates. Your mission is to keep everyone as happy as possible. Assume that there are equal numbers of boys and girls.
Problem
Given a set of preferences, set up the blind dates such that there are no other two people of opposite sex who would both rather have each other than their current partners. Since it was decided that the Prom was Ladies' Choice, we want to produce the best possible choice for the girls.
Input
Input consists of multiple test cases the first line of the input contains the number of test cases. There is a blank line before each dataset. The input for each dataset consists of a positive integerN, not greater than 1,000, indicating the number of couples in the class. Next, there are N lines, each one containing the all the integers from 1 to N, ordered according to the girlÕs preferences. Next, there are N lines, each one containing all the integers from 1 to N, ordered according to the boyÕs preferences.
Output
The output for each dataset consists of a sequence of N lines, where the i-th line contains the number of the boy assigned to the i-th girl (from 1 to N). Print a blank line between datasets.
Sample Input
1
5
1 2 3 5 4
5 2 4 3 1
3 5 1 2 4
3 4 2 1 5
4 5 1 2 3
2 5 4 1 3
3 2 4 1 5
1 2 4 3 5
4 1 2 5 3
5 3 2 4 1
Sample Output
1
2
5
3
4
Source
[Submit] [Go Back] [Status]
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int maxn=1100;int n;int perfect_boy[maxn][maxn];int perfect_girl[maxn][maxn];int future_husband[maxn],future_wife[maxn];int next[maxn];queue<int> q;void engage(int boy,int girl){ int m=future_husband[girl]; if(m) { future_wife[m]=0; q.push(m); } future_husband[girl]=boy; future_wife[boy]=girl;}bool lover(int m1,int m2,int girl){ for(int i=1;i<=n;i++) { if(perfect_boy[girl][i]==m1) return true; if(perfect_boy[girl][i]==m2) return false; }}int main(){ int T_T; scanf("%d",&T_T); while(T_T--) { scanf("%d",&n); memset(perfect_boy,0,sizeof(perfect_boy)); memset(perfect_girl,0,sizeof(perfect_girl)); memset(future_husband,0,sizeof(future_husband)); memset(future_wife,0,sizeof(future_wife)); memset(next,0,sizeof(next)); while(!q.empty()) q.pop(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&perfect_girl[i][j]); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) scanf("%d",&perfect_boy[i][j]); q.push(i); } while(!q.empty()) { int boy=q.front(); q.pop(); int girl=perfect_girl[boy][++next[boy]]; if(future_husband[girl]==0) engage(boy,girl); else { int m=future_husband[girl]; if(lover(boy,m,girl)) engage(boy,girl); else q.push(boy); } } for(int i=1;i<=n;i++) printf("%d\n",future_wife[i]); if(T_T) putchar(10); } return 0;}
- UVALive 3989 Ladies' Choice
- uvalive 3989 Ladies' Choice 稳定婚姻问题
- UVALive 3989 - Ladies' Choice(稳定婚姻匹配)
- UVALive 3989 Ladies' Choice(稳定婚姻问题、Gale-Shapley算法)
- LA 3989 - Ladies' Choice 稳定婚姻问题
- LA 3989 Ladies'Choice(稳定婚姻问题)
- LA 3989 - Ladies' Choice【稳定婚姻问题】
- LA 3989 Problem I – Ladies’ Choice 稳定婚姻问题
- 【LA3989】Ladies' Choice【稳定婚姻】
- Regionals 2007 >> Europe - Southwestern Ladies' Choice 稳定婚姻问题 uva live 3989
- zoj - 3037 - Ladies' Choice(稳定婚姻)
- LA3987 Ladies’ Choice 婚姻稳定算法
- UVA 1175 - Ladies' Choice(稳定婚姻问题)
- uva 1175 Ladies' Choice (稳定婚姻问题)
- uva 1175 - Ladies' Choice(稳定婚姻问题)
- UVA 1175 Ladies's Choice(稳定婚姻问题)
- CHOICE
- Choice
- 一天天天天天天涂
- android4.0 USB Camera实例(五补充)jpg压缩
- windows2003系统下通过windows服务映射远程磁盘失败解决方案
- C#开发使用的几个技巧
- 哥哥哥灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌灌
- UVALive 3989 Ladies' Choice
- SQL中if函数使用技巧
- 解决phpmyadmin上传文件大小限制的配置方法
- 作者帐大大大大
- 机器学习中的数学(2)-线性回归,偏差、方差权衡
- 【LeetCode with Python】 Path Sum II
- 题目1054:字符串内排序 考研机试教程题目5
- 确认
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting