zoukankan      html  css  js  c++  java
  • UVALive 3989 Ladies' Choice


    经典的稳定婚姻匹配问题


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

    [Submit]   [Go Back]   [Status]  

    Description

    Download as PDF

    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
    ",future_wife[i]);
            if(T_T) putchar(10);
        }
        return 0;
    }
    





  • 相关阅读:
    10-SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
    出口增强:已知SMOD查CMOD
    SAP开发系统中开发和配置客户端请求号变更
    ABAP接口之Http发送json报文
    ABAP 常见系统表
    .net程序员转战android第三篇---登录模块之静态登录
    .net程序员转战android第二篇---牛刀小试
    .net程序员转战android第一篇---环境部署
    将一个字符串转变成2元素的数组
    字节小程序客服推送消息
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5166365.html
Copyright © 2011-2022 走看看