首页 > 编程语言 >二分图的最大匹配(匈牙利算法)代码

二分图的最大匹配(匈牙利算法)代码

时间:2024-05-19 09:09:56浏览次数:19  
标签:二分 idx int 匈牙利 ne st 算法 match

二分图的最大匹配

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 505, M = 100005;
int h[N], e[M], ne[M], idx;
int match[N];
bool st[N];
int n1, n2, m;

void add(int a, int b)
{
    e[idx] = b; //e[idx]存放的是第idx条边的终点
    ne[idx] = h[a]; //ne[idx]存放的是与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]))
            {
                match[j] = x;
                return true;
            }
        }
    }
    return false;
}

int main()
{
    cin >> n1 >> n2 >> m;

    memset(h, -1, sizeof h); // 将所有结点连接的边初始化为-1

    while (m--)
    {
        int a, b;
        cin >> a >> b;
        add(a, b); //将每个边加入到邻接表中
    }

    int ans = 0;
    for (int i = 1; i <= n1; i++)
    {
        memset(st, false, sizeof st); //每次都要初始化每个女孩的状态,避免递归出现死循环
        if (find(i)) //如果当前左节点匹配右节点成功
            ans++;
    }

    cout << ans << endl;
    return 0;
}

标签:二分,idx,int,匈牙利,ne,st,算法,match
From: https://www.cnblogs.com/longwind7/p/18200033

相关文章

  • m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       低密度奇偶校验码(Low-DensityParity-Check,LDPC)是一种高效的前向纠错码,因其优越的纠错性能和近似香农限的接近程度而广泛应用于现代通信系统中。LDPC码的编译码算法众多,其中BeliefProp......
  • 代码随想录算法训练营第十一天 | 20.有效的括号 1047.删除字符串中的所有相邻 重复项
    20.有效的括号题目链接文章讲解视频讲解思路:遍历字符串,如果栈不为空,则进行匹配   如果匹配则出栈,否则入栈   如果栈为空,直接入栈   遍历结束后栈为空则说明全部匹配,否则没有全部匹配classSolution{public:boolisValid(strings){stack<cha......
  • 寻路算法 Pathfinding
    目录我该使用哪种算法?BreadthFirstSearch(BFS)Dijkstra’sAlgorithmGreedyBestFirstSearchA*Algorithm学UGUI的一般使用方法,然后在画grid,除了画热力图之外,还开始了解用于处理寻路的算法A*寻路算法是图搜索算法,所以我打算不用Unity自带的寻路组件,自己简单的实现一......
  • 代码随想录算法训练营第第11天 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重
    今天的题主要是关于栈的,比较简单,一次性过20.有效的括号讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。大家先自己思考一下有哪些不匹配的场景,在看视频我讲的都有哪些场景,落实到代码其实就容易很多了。题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.......
  • 二分查找
    输入 n 个不超过 10九次方 的单调不减的(就是后面的数字不小于前面的数字)非负整数 ......
  • 北航研究生算法期末复习整理
    课程名称:算法设计与分析参考往年题来源:TheBloodthirster/BUAA_Course_Sharing数据结构二叉树线索二叉树(ThreadedBinaryTree)利用二叉链表中空的指针域指出结点在某种遍历序列中的直接前驱或直接后继指向前驱和后继的指针称为线索实现不用栈的树深度优先遍历算法二叉查......
  • dijkstra迪杰斯特拉算法(邻接表法)
    ​算法简易过程:迪杰斯特拉算法(朴素)O(n^2)G={V,E}V:点集合E:边集合初始化时令S={某源点ear},T=V-S={其余顶点},T中顶点对应的距离(ear,Vi)值若存在,d(ear,Vi)为弧上的权值,dist【i】若不存在,d(ear,Vi)为无穷大,dist【i】循环n-1次(n个点):1、从T中选......
  • python 对于实现rsa加密算法
    importbase64importrsaclassGenerateKey(object):d="ascii"defgenerate_keys(self,bits=1024):(pubkey,privkey)=rsa.newkeys(bits)pem_pubkey=rsa.PublicKey.save_pkcs1(pubkey).decode(self.d)b64_pubkey......
  • hashMap寻址算法
    hashMap寻址算法计算对象的hashCode()。再进行调用hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。最后(capacity-1)&hash得到索引。为何HashMap的数组长度一定是2的次幂计算索引时效率更高:如果是2的n次幂可以使用位与运算代替取模。扩容时......
  • 代码随想录算法训练营第第九天 | 28. 实现 strStr() 、459.重复的子字符串
    实现strStr()因为KMP算法很难,大家别奢求一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会好懂很多。或者说大家可以放弃一刷可以不看KMP,今天来回顾一下之前的算法题目就可以。因为大家算法能力还没到,......