算法基础之二分图的最大匹配

news/2024/7/15 17:29:18 标签: 算法, 数据结构, 图论, 深度优先, c++

二分图的最大匹配

  • 核心思想:匈牙利算法 : 寻找有没有可重新连接的路

    • 在这里插入图片描述

    •   #include<iostream>
        #include<cstring>
        #include<algorithm>
        
        using namespace std;
        const int N = 510 , M = 100010;
        
        int h[N],e[M],ne[M],idx;
        int match[N];  //记录与j匹配的i
        int n1,n2,m;
        bool st[N];
        
        void add(int a,int b)
        {
            e[idx] = b , ne[idx] = h[a] , h[a] = idx++;
        }
        
        bool find(int x)  //找能不能连接
        {
                for(int i=h[x];i!=-1;i = ne[i])
                {
                    int j = e[i];
                    if(!st[j])  //这次还没有走过
                    {
                        st[j] = true;  //这次走过了
                        if(match[j] == 0 || find(match[j]))  //没有匹配的 或者 对应x还有备胎能匹配
                        {
                            match[j] = x;  //换一个匹配的
                            return true;
                        }
                    }
                }
                return false;
        }
        
        int main(){
            
            cin>>n1>>n2>>m;
            
            memset(h, -1, sizeof h);
            
            while(m--)
            {
                int a,b;
                cin>>a>>b;
                add(a,b);
            }
            
            int res = 0;
            for(int i = 1;i<=n1;i++)  //遍历每一条边
            {  
                memset(st , false , sizeof st);  //清空状态 否则i=2时可能"知难而退" 不会"追求"
                if(find(i)) res ++ ;  //find是找有无备胎的
            }
            
            cout<<res;
        }
      

http://www.niftyadmin.cn/n/5274674.html

相关文章

VueStu01-Vue是什么

1.概念 Vue 是一个 用于构建用户界面 的 渐进式 框架 。 2.构建用户界面 基于数据渲染出用户看到的页面。 3.渐进式 Vue的学习是循序渐进的&#xff0c;可以学一点用一点&#xff0c;不必全部学完才能用。哪怕你只学了 声明式渲染 这一个小部分的内容&#xff0c;你也可以完成…

Debian系统设置SSH密钥登陆

如果没有安装ssh&#xff0c;root权限运行apt install openssh-server进行安装。 ssh-keygen -t rsa # 生成配对密钥&#xff0c;后续一路enter即可会在用户目录&#xff08;即~这个&#xff09;下生成.ssh文件夹&#xff0c;里面的id_rsa是私钥&#xff0c;id_rsa.pub是公钥…

做一个wiki页面是体验HTML语义的好方法

HTML语义&#xff1a;如何运用语义类标签来呈现Wiki网页 在上一篇文章中&#xff0c;我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么&#xff0c;哪些场景适合用到语义类标签呢&#xff0c;又如何运用语义类标签呢&#xff1f; 不知道你还记不记得在大…

Lambda 的表达式作用域(Lambda Scopes)

文章目录 讲一下 Lambda 的表达式作用域&#xff08;Lambda Scopes&#xff09;。访问局部变量访问字段和静态变量访问默认接口方法 讲一下 Lambda 的表达式作用域&#xff08;Lambda Scopes&#xff09;。 访问局部变量 我们可以直接在 lambda 表达式中访问外部的局部变量&a…

RabbitMQ 高级

1.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。消息从发送者发送消息&#xff0c;到消费者处理消息&#xff0c;需要经过的流程是这样的&#xff1a; 消息从生产者到消费者的每一步都可能导致消息丢失&#xff1a; 发送消息时丢失&#xff1a; 生…

解决:Android 报错 Failed to transform exifinterface-1.2.0.jar

一、问题说明 Failed to transform exifinterface-1.2.0.jar (androidx.exifinterface:exifinterface:1.2.0) to match attributes {artifactTypeandroid-classes-jar, org.gradle.categorylibrary, org.gradle.libraryelementsjar, org.gradle.statusrelease, org.gradle.usa…

LVS最终奥义之DR直接路由模式

1 LVS-DR(直接路由模式) 1.1 LVS-DR模式工作过程 1.客户端通过VIP将访问请求报文&#xff08;源IP为客户端IP&#xff0c;目标IP为VIP&#xff09;发送到调度器 2.调度器通过调度算法选择最适合的节点服务器并重新封装数据报文&#xff08;将源mac地址改为调度器的mac地址&am…

基于ChatGPT的安卓端语音助手

介绍 项目特性 支持用户预设问题模板&#xff0c;支持连续对话&#xff0c;支持gpt-3.5-turbo、gpt-4等模型支持联网&#xff0c;允许GPT获取在线网页支持拍照或从相册中上传图片到GPT Vision模型通过无障碍功能捕获音量键事件&#xff0c;实现在任意界面唤起支持从全局上下文…