首页 > 其他分享 >LightOJ - 1400 Employment(婚姻稳定问题)

LightOJ - 1400 Employment(婚姻稳定问题)

时间:2023-04-07 11:32:44浏览次数:62  
标签:include No int LightOJ future 男生 1400 Employment husband


题目大意:在一个party上,有N个男的,N个女的,要求你将其配对,使其满足
1.男生u和女生v还没配对
2.他们喜欢对方的程度都大于喜欢各自当前舞伴的程度
如果出现了2的情况,他们就会抛下当前的舞伴,另外组成一对

解题思路:这题的话,就是婚姻稳定问题,他的解决方法是,男士不断的求婚,而女士不断的拒绝,直到男生找到合适的女生

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int N = 210;
int n, cas = 1;
//No[i][j]表示j在i心中的排名
//pre[i][j]表示第i个人心中,第j的排名是谁

int Next[N], No[N][N], pre[N][N];
int future_husband[N], future_wife[N];

void init() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            scanf("%d", &pre[i][j]);
            No[i][pre[i][j]] = j;
        }
        Next[i] = 1;
    }

    for (int i = n + 1; i <= 2 * n; i++)
        for (int j = 1; j <= n; j++) {
            scanf("%d", &pre[i][j]);
            No[i][pre[i][j]] = j;
        }
}

void solve() {
    memset(future_husband, 0, sizeof(future_husband));
    memset(future_wife, 0, sizeof(future_wife));
    queue<int> Q;
    //男生发出请求
    for (int i = 1; i <= n; i++) Q.push(i);

    while (!Q.empty()) {
        int u = Q.front(); Q.pop();
        int v = pre[u][Next[u]++];

        //如果女生没有舞伴
        if (!future_husband[v]) {
            future_husband[v] = u;
            future_wife[u] = v;
        }//如果女生有舞伴,但符合第二种情况
        else if (No[v][future_husband[v]] > No[v][u]) {
            Q.push(future_husband[v]);
            future_husband[v] = u;
            future_wife[u] = v;
        }//被拒绝了
        else Q.push(u);
    }
    printf("Case %d:", cas++);
    for (int i = 1; i <= n; i++)
        printf(" (%d %d)", i, future_wife[i]);
    printf("\n");
}

int main() {
    int test;
    scanf("%d", &test);
    while (test--) {
        init();
        solve();
    }
    return 0;
}


标签:include,No,int,LightOJ,future,男生,1400,Employment,husband
From: https://blog.51cto.com/u_10970600/6175964

相关文章

  • LightOJ - 1063 Ant Hills(割点)
    题目大意:求无向图中,有多少个割点解题思路:模版题了#include<cstdio>#include<cstring>#include<vector>#include<stack>usingnamespacestd;#definemax(a,b)((a)>(b)?(a):(b))#definemin(a,b)((a)<(b)?(a):(b))constintMAXNODE=10005;constintM......
  • LightOJ - 1041 Road Construction(最小生成树)
    题目大意:给你N条边,看能否形成最小生成树,如果存在,输出值,不存在,另外输出解题思路:模版题#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<string>#include<iostream>usingnamespacestd;constintMAXNOD......
  • 华硕 ASUS-PRIME-B560M-A Intel Core i5-11400黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板ASUS-PRIME-B560M-A处理器IntelCorei5-11400已驱动内存16GBDDR43200Mhz已驱动硬盘WesternDigitalBlackSN750500GB已驱动显卡SAPPHIREPULSERX5600XT6GB已驱动声卡ALC897已驱动网卡I......
  • LiveVISGAT1400视图库服务-支持海康大华华为宇视天地伟业等设备视图库接入使用说明
    @目录LiveVISGAT1400视图库服务安装使用说明1、服务说明1.1、安装包说明1.2、视图库服务1.3、配置视图库服务参数2、服务运行2.1、Windows2.2、Linux3、配置设备接入3.1、海康视图库接入示例3.2、大华视图库接入示例4、平台使用4.1、管理平台4.2、接口文档5、统一编码规则6、Live......
  • omron欧姆龙NJ NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏
    omron欧姆龙NJNX程序全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏。整机采用EtherCAT总线网络节点控制,松下A6总线控制。轴控制全部封装成功能块,可按照使用选择对应......
  • CF1714E 1400
    题意解析由图得a中不能同时存在5的倍数和非5的倍数。若全为5的倍数,将她们的末尾全部操作为0,判断相等即可。若全非5的倍数,将她们的末尾全部操作为2。由于2......
  • CF1400E Clear the Multiset 题解 贪心+分治
    题目链接:http://codeforces.com/problemset/problem/1400/E题目大意:给定一个长度为\(n\)数列\(\{a_n\}\),你可以进行如下操作:操作1:任意选择一个区间\([l,r]\),使区间内......
  • 只有一个程序员开发和运营,BuiltWith网站年入1400万美元是怎么做到的?
    国外有一位程序员叫GaryBrewer,他一人撑起了一个公司,这个公司还年入1400万美元,约人民币1亿元。对此,你是啥想法?先别着急说不可能,这事儿确实是真的:这名程序员名为Gar......
  • 149-gat1400对接(作为上级,与下级对接)
    作为上级,要支持下级的注册、保活、注销、校时的请求。提供的url路径:序号功能URI请求方法1注册/VIID/System/RegisterPOST2注销/VIID/System/UnRegiste......