UVALive 3989 Ladies' Choice

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVALive 3989 Ladies' Choice相关的知识,希望对你有一定的参考价值。


经典的稳定婚姻匹配问题


UVALive - 3989
Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu

[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

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;
}





以上是关于UVALive 3989 Ladies&#39; Choice的主要内容,如果未能解决你的问题,请参考以下文章

UVA && UVALive 开荒

SPOJ-EIGHTS Triple Fat Ladies数学规律

UVA1264 && UVAlive4847 Binary Search Tree

Ladies' Shop

UVALive - 4123 && ALGO-165 Glenbow Museum(排列组合)

[dfs] UVALive 3667 Ruler