简介

一般场景是男生和女生配对的问题,现有男生要去配对如果想去配对的女生已经有喜欢的男生了,那就让想去配对的女生已经喜欢的男生挪挪位置,看看想去配对的女生已经喜欢的男生能不能喜欢其他人,给现有配对的男生让一个位置。

有点绕。但是就是这样。

参考链接

https://www.bilibili.com/video/BV1Wx411L7Di?from=search&seid=16983503622667189725

http://acm.hdu.edu.cn/showproblem.php?pid=2063

code 对应 hdoj 2063

/*
7
1 1
1 2
2 2
2 3
3 1
3 2
4 3
*/ #include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
const int maxn = 510; /**************************************************
@brief : used 表示男生的某一次访问过程中女生有没有被匹配到
nxt 表示女生喜欢的男生
@author : none
@input :none
@output :none
@time : none
**************************************************/
int line[maxn][maxn], used[maxn], nxt[maxn];
int t, n, m, u, v; /**************************************************
@brief : 男生配对
@author : none
@input :none
@output :none
@time : none
**************************************************/
bool Find(int x) {
for (int i = 1; i <= m; i++) { // m 个女生
if (line[x][i] && !used[i]) { // x 和 i 是互相喜欢的,并且这个妹子名花无主
used[i] = 1;// 表示这个妹子配对上
if (nxt[i] == 0 || Find(nxt[i])) {
// 如果这个妹子没有匹配上人 或者 这个男生可以喜欢别人
nxt[i] = x;// i 个女生就和 x 配对上
return true;
}
}
}
return false;
} /**************************************************
@brief : 匹配算法
@author : none
@input :none
@output :none
@time : none
**************************************************/
int match() {
int sum = 0;
for (int i = 1; i <= n; i++) {// n 男生的个数
memset(used, 0, sizeof(used));
if (Find(i)) sum++; // 寻找匹配的妹子
}
return sum;
} int main() {
ios::sync_with_stdio(false);
while (cin >> t && t) {
cin >> n >> m;
memset(nxt, 0, sizeof(nxt));
memset(line, 0, sizeof(line));
while (t--) {
cin >> u >> v;
line[u][v] = 1;
}
cout << match() << endl;
}
// system("pause");
}

深入思考

能不能用这个C++算法解决下面的问题,下面数据说明 越接近0 表示小姐姐越想去上班,1表示小姐姐那天有事儿不能去上班。

https://www.cnblogs.com/eat-too-much/p/13409628.html

TIPS

上面的是多解法,有多个答案,让总体的小姐姐上班开心数值最大也就是总和数值(上班心情值)最小。

匈牙利算法C++实现的更多相关文章

  1. ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)

    //匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...

  2. 匈牙利算法——S.B.S.

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  3. 匈牙利算法与KM算法

    匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...

  4. HDU1054 Strategic Game——匈牙利算法

    Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...

  5. poj1274(匈牙利算法)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22809   Accepted: 101 ...

  6. 匈牙利 算法&模板

    匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...

  7. 【入门】匈牙利算法+HNOI2006 hero超级英雄

    一.关于匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds提出的,用增广路径求二分图最大匹配的算法. 听起来高端,其实说白了就是: 假设不存在单相思(单身狗偷偷抹眼泪),在一个同性恋不合法的国家里( ...

  8. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  9. UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法

    二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...

  10. Poj(1466),最大独立集,匈牙利算法

    题目链接:http://poj.org/problem?id=1466 Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total S ...

随机推荐

  1. @Accessors lombok注解用法

    最近学习代码看到很多有趣的注解:慢慢整理下: @Accessors注解 @Accessors注解官方给出的解释是:面向getter和setter的更流畅的API.用于生成和查找getter和sette ...

  2. Issue: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

    问题: Fatal error compiling: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImpor ...

  3. kettle使用MD5加密增量获取接口数据

    kettle使用MD5加密增量获取接口数据 场景介绍: 使用JavaScript组件进行MD5加密得到Http header,调用API接口增量获取接口数据,使用json input组件解析数据入库 ...

  4. spring-boot静态资源目录配置

    spring-boot静态资源目录配置(配置js.css.图片等资源的位置) spring-boot静态资源默认为/src/main/resources下的/static目录,可以通过applicat ...

  5. 代码随想录第十八天 | Leecode 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先

    530. 二叉搜索树的最小绝对差 题目描述 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 差值是一个正数,其数值等于两值之差的绝对值. 示例 1: 输入:roo ...

  6. MNIST实例-Tensorflow 初体验

    目的还是熟悉这种 tensorflow 框架的基本流程, 即如何导包, 反正我神经网络相关的一些经典理论, BP推导呀, 卷积神经网络呀, 递归神经网络这些的数学原理, 我已经基本推导一遍了, 已基本 ...

  7. SuperSocket 2.0 的发布标志着.NET Socket 服务器框架迈入了一个全新的时代

    2025 年 4 月 20 日 - SuperSocket 团队自豪地宣布正式发布 SuperSocket 2.0,这是这款适用于 .NET 的高性能.可扩展套接字服务器应用程序框架的一个重要里程碑. ...

  8. 为Feign客户端自定义ErrorDecoder

    摘要:重写Feign的错误解码器ErrorDecoder,以自定义业务逻辑.   ErrorDecoder,顾名思义,它是发生错误或者异常情况时使用的一种解码器,允许我们对异常进行特殊处理.   在配 ...

  9. 6 MyBatis动态SQL之choose(when、otherwise)语句

    1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 MyBatis动态SQL之set标签|转 4 MyBatis动态SQL之trim元素|转 5 MyBat ...

  10. 通过chrome插件自动生成博客评论,高效发外链

    最近crazy cattle 3d这个词爆火,很多人都在做,竞争异常激烈,甚至可以说是惨不忍睹. 从最近的数据看,胜出的主要是crazycattle3d.com, crazycattle3d.io, ...