/**
用邻接表添边是图论中基础中的基础,实用价值十分可观
添边为固定格式,理解的最好办法是画几个点,自己用手
模拟一下添边的过程,你会感慨万千,成就感不言而喻。。
链接表 3剑客为:edge[], edgeHead[], ne;
edge[] 为每条边得结构体,你可以在里面放任何附加东西
如:边权w, 流量c, 费用cost。 但v, next是最基本得两个
变量,这决定了链接表的正常工作。。edge[u].v 即表示边 u-v
edge[u].next 为u 连接的下条边在edge[]中的下标
edgeHead[u] 表示节点u 在edge[] 中的位置,通过edgeHead[u]和
edge[u].next 即可遍历连接u 的所有边,具体操作见下代码。
特级注意:edgeHead[] 和 ne 的初始化
*/
/**
匈牙利
*/
#include <cstring>
struct {
int v, next;
}edge[EMax];
int edgeHead[NMax], link[NMax], vis[NMax];
int ne, n; //初始化为1 //n 为匹配点的个数
//初始化edgeHead[]数组为0
void addEdge(int u, int v) {
edge[ne].v = v;
edge[ne].next = edgeHead[u];
edgeHead[u] = ne++;
}
bool dfs(int u) {
for (int i=edgeHead[u]; i; i=edge[i].next) {
int v = edge[i].v;
if (!vis[v]) {
vis[v] = true;
if (link[v]==-1 || dfs(link[v])) {
link[v] = u;
return true;
}
}
}
return false;
}
int hungary() {
int ans = 0;
memset(link, -1, sizeof (link));
for (int i=1; i<=n; i++) {
memset(vis, 0, sizeof (vis));
if (dfs(i))
ans++;
}
return ans;
}
/**
EK
*/
#include <algorithm>
#include <cstdio>
#include <csting>
const int inf = 0x3f3f3f3f;
struct {
int u, v, c, next;
}edge[EMax];
int ne, edgeHead[NMax], pre[NMax];
int ans;
//ne 要初始化为2 因为下面找逆向边所需
//2^1 = 3 3^1 = 2
//即偶数的逆向边即为加1,奇数的逆向边减1
//没关系,即使不理解也没事,只要你相信,当你理解后你会豁然开朗你会觉得它是如此简单就好
void addEdge(int u, int v, int c) {
edge[ne].u = u; edge[ne].v = v;
edge[ne].c = c; edge[ne].next = edgeHead[u];
edgeHead[u] = ne++;
edge[ne].u = v; edge[ne].v = u;
edge[ne].c = 0; edge[ne].next = edgeHead[v];
edgeHead[v] = ne++;
}
bool bfs(int s, int t) {
int que[NMax], vis[NMax], head=0, tail=1;
memset(vis, 0, sizeof (vis));
que[0] = s; vis[s] = true;
while (tail > head) {
int u = que[head++];
for (int i=edgeHead[u]; i; i=edge[i].next) {
int v = edge[i].v;
if (!vis[v] && edge[i].c) {
pre[v] = i;
if (v == t)
return true;
que[tail++] = v;
vis[v] = true;
}
}
}
return false;
}
void end(int s, int t) {
int i, u, sum=inf;
for (u=t; u!=s; u=edge[i].u) {
i = pre[u];
sum = min(sum, edge[i].c);
}
for (u=t; u!=s; u=edge[u].u) {
i = pre[u];
edge[i].c -= sum;
edge[i^1].c += sum;
}
ans += sum;
}
void EK(int s, int t) {
while (bfs(s, t))
end(s, t);
}
//初始化edgeHead = 0, ne = 2;
收藏于 2011-11-23
来自于百度空间相关推荐
匈牙利算法-邻接表
匈牙利算法-邻接表实现 还有一些注释,应该很清楚
匈牙利算法加邻接表
因为匈牙利算法存储边为二维数组,本人怕其空间超限,所#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; int v[1000],u[1000],fir[1000],next[1000],f[1000],used[1000]; int n,m,bian; int ...
目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)
但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。
模板 匈牙利算法(邻接表、dfs)
匈牙利算法(邻接表、dfs版本) #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; typedef long long ll; const int MAXN = 1e3 + 5; int V; //顶点数目 vecto...
VS code平台调试AutoLISP程序教程
VS code平台调试AutoLISP程序教程
QGroundControl高级配置与自定义功能实战指南
本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。
匈牙利算法(邻接表)
象棋 描述 你有足够多的象棋“车”,在一个n×n的棋盘上你能放多少个“车”呢?注意,所给棋盘上有些位置不能放任何东西。同时,某一行(列)最多只能存在一个“车”。 输入 第一行为一个正整数n。 接下来n行,每行包含n个整数,若为0表示这个位置不能放“车”;若为1表示这个位置可以放“车”。 输出 输出一个整数,表示最多能放多少个“车”。 样例1输入 5 1 0 0 0 0 0 0 ...
手把手教你用Python实现ITRS与GCRS坐标转换(附完整代码)
本文详细介绍了如何使用Python的Astropy库实现ITRS与GCRS坐标转换。文章从环境配置、坐标对象构建入手,深入解析了transform_to方法背后的转换矩阵与地球定向参数管理,并通过卫星地面轨迹计算实战案例,帮助开发者掌握高精度空间坐标转换的核心技术与工程实践。
二分图的最大匹配——最大流EK算法
序: 既然是个图,并且求边数的最大值。那么这就可以转化为网络流的求最大流问题。 只需要将源点与其中一子集的所有节点相连,汇点与另一子集的所有节点相连,将所有弧的流量限制置为1,那么最大流 == 最大匹配。(感谢yulemao大神的指点)只需要在初始化的时候修改一下,就可以直接用求最大流的算法模板了。 本文代码使用EK算法, 为POJ 1469的AC代码。 EK算法解析源代码:/* About
TMF8801 ToF激光测距传感器原理图设计,已量产(距离传感器)
这张 TMF8801 小板的外围结构就很有代表性。核心传感器是 U1 TMF8801,但真正构成量产价值的是外围那一圈:U2 把 VCC 整理成 3V,R1/R2/R5 与 R3/R4/R6 两组 10K 电阻稳定默认态,Q2 2N7002 和 U3 SN74LVC2G07DCKR 处理控制链路,传感器边上还有 C1/C4/C5 三颗 100nF 紧贴去耦。
YOLOv8 智能交通流量监测完整解决方案
YOLOv8智能交通流量监测系统基于先进的目标检测技术,提供实时车辆识别与统计分析功能。该系统通过虚拟检测线实现多方向车流量统计,支持多种车辆类型分类,并具备数据可视化、异常事件预警等核心功能。完整解决方案包含模型训练、实时检测、批量处理、结果分析等模块,并提供Flask API和Docker两种部署方案。系统采用YOLOv8算法实现高效检测,支持GPU加速,可通过量化、剪枝等技术进一步优化性能,为智能交通管理提供可靠的数据支持和技术保障。
二分图匹配(匈牙利, 最大流)
匈牙利 #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<cstdlib> #include<cmath> #include<stack> #include<map> #include<ve...
软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)
软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级
匈牙利&&EK算法(写给自己看)
(写给自己看)匈牙利算法(最大匹配)和KM算法(最佳匹配) 匈牙利算法 思想 不断寻找增广路,每次寻得增广路,交换匹配边和非匹配边,则匹配点数+1 这里增广路含义:交错路,即从未匹配点出发经过未匹配边->匹配边->未匹配边->.....->未匹配边 Konig定理:无权二分图的最大匹配=最小覆盖点集,证明 有价值的博客:blog1,blog2,blog3 算法其实并不难 ...
Python爬虫:抓取专利数据并分析专利趋势
本文展示了如何使用 Python 爬虫技术抓取中国专利数据,并对数据进行了清洗、分析和趋势预测。通过分析专利数据,企业和科研机构可以了解行业的技术发展趋势,进行技术创新战略规划。未来,我们可以进一步扩展爬虫的功能,抓取更多专利数据,增加多维度的数据分析,如技术领域、地域分布等。同时,可以尝试使用深度学习模型(如 LSTM)进行时间序列预测,以获得更准确的专利趋势预测。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
POJ 1422 Air Raid(二分图匹配+最小路径覆盖+匈牙利算法)
Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets you can never reach the same intersection i.e. the town's stree
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
【匈牙利算法】最大二分匹配——算法设计与分析
介绍了最大二分匹配问题,介绍了Hungarian匈牙利算法,并给出算法实例展示。
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
二分图最大匹配——匈牙利算法,网络流初步——最大流问题+最小费用最大流+常用建图
二分图最大匹配——匈牙利算法 对不起 懒得粘 图太多 但是真的好秀 人家创作的确实好,真丶看一遍就懂了 作者:Dark_Scope 来源:优快云 原文:https://blog.youkuaiyun.com/dark_scope/article/details/8880547 写这个博客 主要还不是不喜欢书上的板子,自己理解后按照自己的理解写出最适合自己的板子多好 留个匈牙利算法的...
poj 1274 The Perfect Stall(匈牙利算法)
<br /> <br /> 这个之前用最大流做过了,用最大流模拟最大匹配。。。建立源汇然后。。<br /> <br />详见 http://blog.youkuaiyun.com/zxy_snow/archive/2011/02/06/6173428.aspx<br /> <br />这个是学了匈牙利算法后第一个想起来的题,就来写了下,刚才A掉了,16ms,查了下以前用EK最大流算法A的,300+MS。。时间差好多哎。。<br /> <br />说了,贴代码,水题一道,匈牙利的英文名字 Hungary。<br />
最大流问题(EK算法模板)
最近在看 最大流问题,因为是第一次涉及到这种问题,以及第一次接触到这种类型的算法,所以刚开始一头雾水。 首先,这种问题概念比较多,残存网络,增广路径,最小割,流量对称,等。 其次,虽然有现成的方法解决,但是解决此方法的算法有多种,优化的算法也有很多。 刚开始看 Dinic 匈牙利算法,真心没看懂。。 现在我写了一份模板,是EK算法实现的。应该算最简单的一种实现方法了。我觉得,只要会熟练掌握
POJ 2239 Selecting Courses(二分图匹配——匈牙利算法||网络流)解题报告
题目大意: 在大学里有许许多多的课程,现在李明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程。 在学校里有n个课程,每周7天,每天有12节课,一周一共有有7*12节课。某一节课在一周内会上x次,一周内的这x次内容一样,只需要去一次就可以了。同时,某个时间李明最多只能去上一门课程。问李明最多能上多少门课。 输入第一行为n,代表有n个课程。接下来n行,每行第一个数字x代表这个课程在
poj 1422 Air Raid 匈牙利算法
题目: Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets yo...
PKU 2584 - T-Shirt Gumbo (二分图最大匹配 & 匈牙利算法 | 最大流 & EK)
题意 给出一个人能穿的型号和每个型号衣服的多少,求能不能每个人恰好分配到一件。 思路 第一次先用最大流写了一下,然后就试试最大匹配。 最大匹配就是把n件相同的衣服拆成一件一件,分别编号,再把人和它们相连,然后就匈牙利算法了。 感觉用最大匹配写繁琐一点。 被注释部分是最大流的 代码 #include #include #include
HDU 1151 Air Raid 最小路径覆盖,二分图匹配匈牙利算法(邻接表存关系)处理有向图
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1151 Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5276 Accepted Submission(s
最佳二分图匹配算法(总结)
EK算法 O(n*e^2) 通过调整加权完全二分图的可行顶标,将加权完全二分图转化为无权二分图,使得加权完全二分图的最佳匹配与转化后的无权二分图的最佳匹配相同,在此基础上采用匈牙利算法。 最小费用最大流算法 O(n*e) 将带权二分图转化为相应的网络流图, 1)构建源点s跟汇点t 2)对于iX,建立一条容量为1,费用为0的有向边(s,i). 3)对于jY,建立一条容量为1...
509



被折叠的 条评论
为什么被折叠?



