二分图最大权完美匹配 KM算法

news/2025/10/8 21:19:38/文章来源:https://www.cnblogs.com/xdhking/p/19130128

image

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define LL long long
#define N 510
#define INF 1e12
int n,m;
int match[N];//右点匹配了哪个左点
int va[N],vb[N];//标记是否在交替路中
LL la[N],lb[N];//左顶标,右顶标
LL w[N][N],d[N];//维护更新的delta值bool dfs(int x){va[x]=1; //x在交替路中for(int y=1;y<=n;y++){if(!vb[y]){if(la[x]+lb[y]-w[x][y]==0){//相等子图vb[y]=1; //y在交替路中if(!match[y]||dfs(match[y])){match[y]=x; //配对return 1;}}else //不是相等子图则记录最小的d[y]d[y]=min(d[y],la[x]+lb[y]-w[x][y]);}}return 0;
}
LL KM(){//左顶标取i的出边的最大边权for(int i=1;i<=n;i++) la[i]=-INF;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) la[i]=max(la[i],w[i][j]);for(int i=1;i<=n;i++) lb[i]=0;      for(int i=1;i<=n;i++){while(true){//直到左点i找到匹配fill(va+1,va+n+1,0);fill(vb+1,vb+n+1,0);fill(d+1,d+n+1,INF);if(dfs(i))break;LL delta=INF;for(int j=1;j<=n;j++)if(!vb[j])delta=min(delta,d[j]);for(int j=1;j<=n;j++){//修改顶标if(va[j])la[j]-=delta;if(vb[j])lb[j]+=delta;}}}LL res=0;for(int i=1;i<=n;i++)res+=w[match[i]][i];    return res;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) w[i][j]=-INF; for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);w[x][y]=z;}printf("%lld\n",KM());for(int i=1;i<=n;i++) printf("%d ",match[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做一张简单的app网站多钱黔东南建设厅官方网站

对于初学者来说&#xff0c;java中的"\t"和空格总是让人迷惑&#xff0c;其实很简单&#xff0c;通过一个例子就能很快明白&#xff01;比如说打印九九乘法表&#xff01;先来看用空格的效果&#xff01;1 package cn.edu.nwpu.java;23 public class MultiplicationT…

2025.10.8模拟赛

赛时 看了T1,然后差不多想到做法了,但是没想明白是怎么判a_i相等的 后来写二分+哈希,切了,但是由于没有考虑到可以进行合并,60pts 遂开T2,画了一张特别大的图,然后唐完了 发现了在连续的一段下降是最优的,又发…

Python 中的排序排序函数及区别

Python 中的排序排序函数及区别 在 Python 中,常用的排序功能主要通过两种方式实现:sorted() 内置函数和列表的 sort() 方法。它们都能完成排序任务,但在使用场景和特性上有显著区别。 一、两种核心排序工具 1. sor…

房地产网站建设哪家有效果网站优化公司排行

free命令 ​free是指查看当前系统内存的使用情况&#xff0c;它显示系统中剩余及已用的物理内存和交换内存&#xff0c;以及共享内存和被核心使用的缓冲区。 作者 作者&#xff1a;Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

wordpress 表说明长沙网站包年优化

awk&#xff08;是一种处理文本文件的应用程序&#xff0c;它依次处理文件的每一行&#xff0c;并读取里面的每一个字段。&#xff09; awk 包含几个特殊的内建变量&#xff08;可直接用&#xff09;如下所示&#xff1a; 1、获取根分区剩余大小 #可以使用df -h命令来查看所有…

岗贝路网站建设产品设计英文

2024年8月7日至9日&#xff0c;一场生物制造领域的盛会将在上海新国际博览中心闪亮登场。那就是2024上海国际合成生物学与绿色生物制造展览会。这场盛会将同期举办2024第13届上海国际生物发酵展&#xff0c;形成了一个强大的“生物军团”&#xff0c;展现出生物科技领域的无限魅…

搭建asp虚拟主机网站wordpress同分类文章

碰到的问题 上传Datafrane格式的数据到数据库 会碰见很多错误 举几个很普遍遇到的问题(主要以SqlServer举例) 这里解释下 将截断字符串或二进制数据 这个是字符长度超过数据库设置的长度 然后还有字符转int失败 或者字符串转换日期/或时间失败 这个是碰到的需要解决的最多的问…

长春餐饮网站建设wordpress页面构造器

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 在本文中&#xff0c;我们将学习如何在LangChain中创建简单的链式连接并添加组件以及运行它。链式连接允许我们将多个组件组合在一起&#xff0c;创建一个统一的应用程序。例如&#xff0c;我们可以创建一个链式连接&a…

RL | 速读 IJCAI 2025 的强化学习论文

速读一下 IJCAI 2025 的 RL 相关论文。目录359 Multi-granularity Knowledge Transfer for Continual Reinforcement Learning - 为持续 RL 而设计的多粒度知识迁移一、 研究背景与核心痛点(The Gap)二、 动机与故事…

Superhumanism

The civilizeds support Superhumanism. But they didnt support the Nazi Germany! Because they dont see the similar. Because they dont see the consequences. A normal human cannot become a superman, but if…

IDM弹窗解决 - -一叶知秋

IDM弹窗解决1、打开任务管理器,结束IDM任务(一定要结束全部的IDM任务)2、在控制面板中,打开 管理工具(有搜索)3、然后打开 本地安全策略4、找到 软件限制策略->其它规则,如果 软件限制策略 下面没有选项,就…

PHP+MySQL开发语言 在线下单订水送水小脚本源码及搭建指南

PHP+MySQL开发语言 在线下单订水送水小脚本源码及搭建指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

Sliding Window Algorithm

核心目的 滑动窗口技术的主要目的是优化算法。它能将一个通常需要用两层嵌套循环(时间复杂度为 \(O(N^2)\))才能解决的问题,转化为只需一次单循环(时间复杂度为 \(O(N)\)),从而大大提高代码的执行效率。工作原理…

微信企业号可以做微网站吗宿州建设银行网站

对数值进行调整在Python中对整数和浮点数进行数字计算是很容易的。但是&#xff0c;如果你需要对分数&#xff0c;数组或者日期和时间进行计算&#xff0c;这就会稍微复杂点。对于简单的取整操作&#xff0c;我们可以使用内建的round(value, ndigits)函数就可&#xff0c;举个例…

网站建设所需人员上海如何优化网站

动态通过网络获取json来tabbar图片和文字或其他信息转载于:https://www.cnblogs.com/TheYouth/p/6488843.html

合肥的网站建设剂屏购物网站开发流程

文章目录 5 智能指针与内存管理5.1 RAII与引用计数5.2 std::shared_ptr5.3 std::unique_ptr5.4 std::weak_ptr 6 正则表达式7 并行与并发7.1 并行基础7.2 互斥量与临界区7.3 期物7.4 条件变量7.5 原子操作与内存模型 5 智能指针与内存管理 5.1 RAII与引用计数 在传统 C 中&am…

广西柳州网站建设公司网站建设的实验总结

文章目录 生成数据帧参考 生成数据帧 代码如下&#xff0c;代码很简单&#xff0c;有几点要注意&#xff0c; 较高版本的MATLAB中支持0x的写法使用bitand进行位运算使用strcat函数进行字符串拼接时&#xff0c;如果需要插入空格&#xff0c;要使用双引号 cmd_ay(1) 0x33; …

图片 展示 网站模板快速seo整站优化排行

本博客参考官方文档进行介绍&#xff0c;全网仅此一家进行中文翻译&#xff0c;走过路过不要错过。 官方网址&#xff1a;https://www.mpi-forum.org/ 参考文档&#xff1a;https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf 引用官方4.1文档方法&#xff1a; manu…

国庆模拟赛总结

2025/10/2 T1 这道题我一眼出思路呀,直接建反边然后判断一下可达性不就秒了吗,10分钟直接秒,不过有点坑,第一个点如果没出边那它就应该标记合法,这不标直接100pts->90pts,以后还是要多注意细节。还有一点很重…

深入解析:video-audio-extractor:视频转换为音频

深入解析:video-audio-extractor:视频转换为音频pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…