首页 > 其他分享 >二分图最大匹配/二分图最大权匹配

二分图最大匹配/二分图最大权匹配

时间:2024-09-27 11:14:28浏览次数:7  
标签:二分 匹配 最大 int vis tag match

二分图最大匹配

匈牙利算法

思路

算法核心:找“增广路”

遍历所有左侧点,每次进行一下流程:

  1. 尝试去寻找一个右侧点来匹配;
  2. 若该右侧点还没有匹配的左侧点,则找到了,回溯。否则进入改右侧点的匹配左侧点,回到1。

代码

const int N = 505;
int n, m, tag;
vector<int> g[N];
int match[N], vis[N];
int ans;

bool dfs(int u)
{
    vis[u] = tag;
    for (auto &&v : g[u])
        if (!match[v] || vis[match[v]] != tag && dfs(match[v]))
        {
            match[v] = u;
            return true;
        }
    return false;
}

int main()
{
#ifdef aquazhao
    freopen("data.in", "r", stdin);
    // freopen("data.out", "w", stdout);
#endif
    int x;
    cin >> n >> x >> m;
    int u, v;
    for (int i = 1; i <= m; i++)
        scanf("%d%d", &u, &v), g[u].push_back(v);
    for (int i = 1; i <= n; i++)
    {
        ++tag;
        ans += dfs(i);
    }
    cout << ans << endl;
    return 0;
}

二分图最大权匹配

KM算法

标签:二分,匹配,最大,int,vis,tag,match
From: https://www.cnblogs.com/avalaunch/p/18435290

相关文章

  • 计算理论最大电流
    充电宝(也称为移动电源或电源银行)的电流计算涉及几个关键参数,包括充电宝的容量、电压以及充电设备的功率需求。以下是一些基本步骤和公式,用于计算充电宝为设备充电时的电流。1.了解充电宝的规格容量:通常以毫安时(mAh)或瓦时(Wh)表示。输出电压:大多数充电宝的输出电压通常是5伏(USB......
  • CF1592F2-Alice and Recoloring 2-分析、二分图
    link:https://codeforces.com/contest/1592/problem/F2题意:给定一个\(n\)行\(m\)列的目标矩阵,矩阵元素只有W或B,并且你有一个初始矩阵,元素全为W。现在你可以矩阵实施以下操作:使用一块钱,选定一个包含\((1,1)\)的子矩阵,把矩阵中的元素全部反转(W变B,B变W)。使用......
  • codeforces round 971(div4)E(二分答案,禁用数学方法)
    解题历程:开始想的是用数学公式的方法,利用公式推出二次函数,再求出根,再用根求出答案,检查了一个小时,结果怎么改都有细微的偏差,最后发现答案先单调递减在单调递增,那么可以用二分答案的方法查找最小的答案,二分对细节的处理要求比较高,于是在二分中加入了一个限制,当二分的区间小于5时,就......
  • 关于GS匹配算法(Gale_shaply)及想法
    1.GS匹配算法首先第一个问题。简单介绍一下GS匹配算法,Gale-Shapley匹配算法是基于“稳定婚姻”问题提出的。假设有n个男性和m个女性,每个男性都有自己的偏好列表,同样,每个女性也有自己的偏好列表。算法的目标是为这n对男女实现稳定匹配。2.什么是稳定匹配第二个问题就是......
  • 410. 分割数组的最大值(leetcode)
    https://leetcode.cn/problems/split-array-largest-sum/description/比较难的二分,关键点在于看出二段性,段数越多最大值越小,段数越小最大值越大,二分最大值,然后就是最大值的合法性校验(判断段数<=k),用于二分的checkclassSolution{publicintsplitArray(int[]n......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、977.有序数组的平方。
    704.二分查找总结:防止int溢出:classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){intmiddle=(left+right)/2;//intmid=(right-left)/......
  • 10章4节:二分类变量的Meta分析模型,绘制漏斗图和应用剪补法,最后绘制和解读轮廓增强漏斗
    本文继续接着用Fleiss93数据集。一、公式构建和结果解读的前文回顾Fleiss93数据集来自Meta扩展包,包含了20世纪70年代至80年代进行的七个关于阿司匹林预防心肌梗死后死亡的临床试验。10章3节:二分类变量的Meta分析模型,分析公式构建和结果解读-CSDN博客文章浏览阅读421次。本......
  • Linux单机最大并发到底是多少?
    Linux单机最大并发到底是多少?-知乎(zhihu.com)所谓C10K就是单机1w并发问题,其中IO复用epoll/kqueue/iocp等技术对于C10k问题的解决起到了非常重要的作用。所谓C10W就是单机1000w并发问题,未来待解决==========================================五元组数一个五元组可以唯一标......
  • 广州C++信奥老师解一本通题 1260:1282:最大子矩阵
    ​ 【题目描述】已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×1)子矩阵。比如,如下4×4的矩阵0 -2-7 09 2-6 2-4 1-4 1-1 8 0-2 的最大子矩阵是92-41-18 这个子矩阵的大小是15......
  • 精通Java并发锁机制:24种锁技巧+业务锁匹配方案(第一部分)
    在Java并发编程中,锁是确保线程安全、协调多线程访问共享资源的关键机制。从基本的synchronized同步关键字到高级的ReentrantLock、读写锁ReadWriteLock、无锁设计如AtomicInteger,再到复杂的同步辅助工具如CountDownLatch、CyclicBarrier和Semaphore,每种锁都针对......