UVALive 3989 Ladies' Choice
2016-01-28 15:15
337 查看
经典的稳定婚姻匹配问题
UVALive - 3989 Ladies' Choice
Description Problem I – LadiesÕ Choice BackgroundTeenagers 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. ProblemGiven 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 bestpossible choice for the girls. InputInput 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, indicatingthe 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. OutputThe 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 Input15 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 Output12 5 3 4 Source Southwestern 2007-2008 [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; }
相关文章推荐
- webView的一些经验总结
- 定时器中断
- textField 总结
- cmd命令大全/cmd命令提示符大全
- Highchart 时区偏移问题解决。
- requestAnimationFrame()
- CSS fliter
- ASP.net 验证码(C#) MVC
- 关于baidu_tempalate 的使用
- win10硬盘安装ubuntu(15.10)双系统
- iOS开发 贝塞尔曲线UIBezierPath
- greenplum维护中的一些技巧
- 数据结构基础(5) --归并排序
- 一个小时内学习SQLite数据库
- 关于iOS中的NSURLSession
- [LeetCode] Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数
- textField 基本属性
- PHP5各个版本的新功能和新特性总结
- warning: World-writable config file my.cnf is ignored
- codeforces 620D D. Professor GukiZ and Two Arrays