整理的算法模板合集: ACM模板
题意:给定n个男人,n个女人,每个人心中对异性都有一个排序,从左往右是最喜欢到最不喜欢,然后现在要求一个稳定匹配,使得n对男女中,不存在男人对其他女人好感度大于配偶且女人对其他男人好感度大于配偶
思路:稳定婚姻问题,算法过程如下:
男人不断求婚,从最喜欢到最不喜欢,女人每次在求婚人中,选择一个最喜欢的配对,然后抛弃现在的配对,这个过程可以用一个队列存放求婚男人,这样直到队列为空,也就匹配完毕了
typedef long long ll;
const int N = 5007, M = 5000007, INF = 0x3f3f3f3f;
int n, m;
int future_wife[N], future_husband[N];
int pre[N][N], order[N][N], nex[N];
queue<int>q;
//男士是根据喜欢的程度从高到低去求婚请示,男士主动
//女士被动,只能从所有向她求婚的人中选择最喜欢的哪一位,比较惨,有可能选的是她最不喜欢的那一位。
void engage(int man, int woman)
{
int los