码迷,mamicode.com
首页 > 其他好文 > 详细

模板:稳定婚姻问题

时间:2018-03-22 23:06:40      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:col   ons   void   pos   nbsp   int   for   bit   body   

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N=234;
 5 
 6 int Rank[N][N];//i,j  第i个人心中,第j排名是谁
 7 int M[N][N];//i,j  j在i心中的排名
 8 int boy[N],girl[N],Next[N];
 9 int n,t;
10 
11 void solve(){
12     memset(boy,0,sizeof(boy));
13     memset(girl,0,sizeof(girl));
14     for(int i=1;i<=n;i++) Next[i]=1;
15     queue <int> Q;
16     for(int i=1;i<=n;i++) Q.push(i);
17     while(!Q.empty()){
18         int u=Q.front();Q.pop();
19         int v=Rank[u][Next[u]++];
20         if(!girl[v]){
21             girl[v]=u;
22             boy[u]=v;
23         }
24         else if(M[v][girl[v]]>M[v][u]){
25             Q.push(girl[v]);
26             girl[v]=u;
27             boy[u]=v;
28         }
29         else Q.push(u);
30     }
31     for(int i=1;i<=n;i++)
32     printf(" (%d %d)",i,boy[i]);
33     printf("\n");
34 }
35 
36 int main(){
37     scanf("%d",&t);
38 
39     for(int k=1;k<=t;k++){
40         scanf("%d",&n);
41         for(int i=1;i<=n;i++)
42         for(int j=1;j<=n;j++){
43             scanf("%d",&Rank[i][j]);
44             M[i][Rank[i][j]]=j;
45         }
46         for(int i=n+1;i<=2*n;i++)
47         for(int j=1;j<=n;j++){
48             scanf("%d",&Rank[i][j]);
49             M[i][Rank[i][j]]=j;
50         }
51         printf("Case %d:",k);
52         solve();
53     }
54 
55     return 0;
56 }

 

模板:稳定婚姻问题

标签:col   ons   void   pos   nbsp   int   for   bit   body   

原文地址:https://www.cnblogs.com/Leonard-/p/8627466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!