zoj - 3037 - Ladies' Choice(稳定婚姻)

2023-11-03 12:58

本文主要是介绍zoj - 3037 - Ladies' Choice(稳定婚姻),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:N个女生,N个男生,女生对每个男生的好感程度不同,男生对每个女生的好感程度也不同,现在要男女生搭配跳舞,求配对方法,使得每个人都有舞伴,且不存在男A与女B是舞伴,男C与女D是舞伴,但(比起女B)男A更喜欢女D且(比起男C)女D更喜欢男A。配对完后,女生较男生更(或者同等)“幸福”(1 <= N <= 1000)。

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3037

——>>接触的第一道稳定婚姻题目,看了求婚-拒绝算法后,想A这道题,一看LA和Uva的提交情况,全Submission error,交不了,在vjudge搜了一下,发现zoj有加这题,好微笑~题目说先输入女生对男生的排位,而RJ的《训练指南》却先输入男人对女人的排位,我想是不是搞反了?最后发现,样例也得先输入男人才通得过,这是???再看题目, we want to produce the best possible choice for the girls,女生得到自己能得到的最好的男生舞伴。终于明白了,这里的女生相当于稳定婚姻中的男人(所有男士娶到自己有可能娶到的最好的妻子,女士只能嫁给自己有可能嫁到的最差的丈夫)。

#include <cstdio>
#include <queue>using namespace std;const int maxn = 1000 + 10;int N, order[maxn][maxn], pref[maxn][maxn], future_husband[maxn], future_wife[maxn], nxt[maxn];
queue<int> qu;void engage(int man, int woman){if(future_husband[woman]) qu.push(future_husband[woman]);future_husband[woman] = man;future_wife[man] = woman;
}void init(){while(!qu.empty()) qu.pop();
}void read(){scanf("%d", &N);for(int i = 1; i <= N; i++){for(int j = 1; j <= N; j++)scanf("%d", &pref[i][j]);future_wife[i] = 0;nxt[i] = 1;qu.push(i);}for(int i = 1; i <= N; i++){for(int j = 1; j <= N; j++){int x;scanf("%d", &x);order[i][x] = j;}future_husband[i] = 0;}
}void solve(){while(!qu.empty()){int man = qu.front(); qu.pop();int woman = pref[man][nxt[man]++];if(!future_husband[woman] || order[woman][man] < order[woman][future_husband[woman]])engage(man, woman);else qu.push(man);}for(int i = 1; i <= N; i++) printf("%d\n", future_wife[i]);
}int main()
{int P;scanf("%d", &P);while(P--){init();read();solve();}return 0;
}


这篇关于zoj - 3037 - Ladies' Choice(稳定婚姻)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338316

相关文章

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

zoj 1721 判断2条线段(完全)相交

给出起点,终点,与一些障碍线段。 求起点到终点的最短路。 枚举2点的距离,然后最短路。 2点可达条件:没有线段与这2点所构成的线段(完全)相交。 const double eps = 1e-8 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;

zoj 4624

题目分析:有两排灯,每排n个,每个灯亮的概率为p,每个灯之间互不影响,亮了的灯不再灭,问两排中,每排有大于等于m个灯亮的概率。 设dp[ i ][ j ]为第一排亮了i个灯,第二排亮了j个灯,距离目标状态的期望天数。显然 i >= m ,j >= m时 , dp[ i ][ j ] = 0 。 状态转移 : 第一排亮了a个灯,a 在[ 0 , n - i] 之间,第二排亮了b个灯 , b 在

zoj 3228 ac自动机

给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。 Sample Input ab 2 0 ab 1 ab abababac 2 0 aba 1 aba abcdefghijklmnopqrstuvwxyz 3 0 abc 1 def 1 jmn Sample Output Case 1 1 1 Case 2

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

两轴直驱稳定云台的电源系统设计与关键要求

两轴直驱稳定云台,作为现代摄影、摄像及监控领域的高精尖设备,广泛应用于各种不稳定环境(如移动车辆、海上船只、空中飞机等),以提供相机、传感器等关键设备的稳定支持。其卓越的性能和可靠性,很大程度上依赖于其精心设计的电源系统。本文将对两轴直驱稳定云台的电源系统要求进行全面剖析,并深入探讨电压波动可能带来的不良影响及应对措施。 电源系统的核心要求 高容量与功率:

ZOJ 3324 Machine(线段树区间合并)

这道题网上很多代码是错误的,由于后台数据水,他们可以AC。 比如这组数据 10 3 p 0 9 r 0 5 r 6 9 输出应该是 0 1 1 所以有的人直接记录该区间是否被覆盖过的方法是错误的 正确方法应该是记录这段区间的最小高度(就是最接近初始位置的高度),和最小高度对应的最长左区间和右区间 开一个sum记录这段区间最小高度的块数,min_v 记录该区间最小高度 cover

Java SpringBoot集成Vue.js,构建茶园茶农文化交流平台,四步实现高效互动,MySQL存储数据更稳定

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目、 源码、对代码进行完整讲解、文档撰写、ppt制作。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~ Java实战项目