码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 搜索与图论:匈牙利算法


    将所有点分成两个集合,使得所有边只出现在集合之间,就是二分图

    二分图:一定不含有奇数个点数的环;可能包含长度为偶数的环, 不一定是连通图

    二分图的最大匹配:

    1. #include
    2. #include
    3. using namespace std;
    4. const int N = 510 , M = 100010;
    5. int n1,n2,m;
    6. int h[N],ne[M],e[M],idx;//邻接表
    7. bool st[N];
    8. int match[N];
    9. void add(int a , int b)
    10. {//头插法
    11. //如图 如1与2之间要有一条线,让2的ne为1,再让h[1]为2的索引。
    12. //这样h[1]就是1节点存的最后一个相连的点,如图就是7节点。
    13. //而在索引表内部,通过头插法的方式(即每次ne指向上一个点(h存的就是上一个点)),索引表为:7->4->2
    14. e[idx] = b, ne[idx] = h[a], h[a] = idx++;
    15. }
    16. int find(int x)
    17. {
    18. //遍历自己喜欢的女孩
    19. for(int i = h[x] ; i != -1 ;i = ne[i])
    20. {
    21. int j = e[i];
    22. if(!st[j])//如果在这一轮模拟匹配中,这个女孩尚未被预定
    23. {
    24. st[j] = true;//那x就预定这个女孩了,这里预定是防止她男朋友找其他喜欢的女孩时不重复找这个
    25. //如果女孩j没有男朋友,或者她原来的男朋友能够预定其它喜欢的女孩。配对成功
    26. if(!match[j]||find(match[j]))
    27. {
    28. match[j] = x;
    29. return true;
    30. }
    31. }
    32. }
    33. //自己中意的全部都被预定了。配对失败。
    34. return false;
    35. }
    36. int main()
    37. {
    38. memset(h,-1,sizeof h);
    39. scanf("%d%d%d",&n1,&n2,&m);
    40. while(m--)
    41. {
    42. int a,b;
    43. scanf("%d%d",&a,&b);
    44. add(a,b);
    45. }
    46. int res = 0;
    47. for(int i = 1; i <= n1 ;i ++)
    48. {
    49. //因为每次模拟匹配的预定情况都是不一样的所以每轮模拟都要初始化
    50. memset(st,false,sizeof st);
    51. if(find(i)) res++;//找到一条边,则res++
    52. }
    53. printf("%d\n",res);
    54. }

  • 相关阅读:
    记华为荣耀手机调试H5
    053:mapboxGL中sources的6种类型及各类型的示例代码
    钉钉与实在智能达成战略合作,实在Agent助力钉钉AI助理成为“新质生产力”
    ChatGPT Prompting开发实战(四)
    计算机网络4小时速成:计算机网络基础,计网组成,计网分类,性能指标,标准化组织,计网结构模型,五层模型
    校园网课刷题小程序源码系统 带完整搭建教程
    使用 Transformers 为多语种语音识别任务微调 Whisper 模型
    相机sd卡照片丢失怎么找回呢?
    【go零基础】go-zero从零基础学习到实战教程 - 0环境配置
    七、Sleuth分布式链路请求跟踪
  • 原文地址:https://blog.csdn.net/qq_63610563/article/details/134090052
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号