No.30 - POJ1325 - 匈牙利算法

DuCut_1794120730156_604.mp4 立即下载

首先题目是求二部图的最小点覆盖集。

最小点覆盖:\red{最小点覆盖:}最小点覆盖:取最少的点使图没有孤立边

有个转化定理:二部图\green{二部图}二部图 的 最小点覆盖集\blue{最小点覆盖集}最小点覆盖集 = 最大匹配\blue{最大匹配}最大匹配

很好理解,倘若最小点覆盖集之外,还有一对儿匹配,则该边是孤立边,该边中点任意一点应该划入最小点覆盖集。
相反,若最大匹配所包含的点之外,还有边没有连接到这些点,则这条边及其两点可以再形成一个匹配。

再说说匈牙利算法:\green{再说说匈牙利算法:}再说说匈牙利算法:

实质上是一种暴力搜索算法,
对于一个x,按任意顺序找一个y,如果能匹配上,则找下一对儿。
若不能,递归处理之前匹配到y的x能不能再换个对象。
如果换所有y都不能,那当前x匹配失败。


// ShellDawn
// POJ1325
// No.30

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<math.h>
#define MM(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
//

#define maxn 220

int N,M,K;
int E[maxn][maxn];
int V[maxn];
int Match[maxn];

bool dfs(int x){
    for(int i=1;i<=M;i++){
        if(E[x][i] == 1&&V[i] == 0){
            V[i] = 1;
            if(Match[i] == -1 || dfs(Match[i])){
                Match[i] = x;
                return true;
            }
        }
    }
    return false;
}

int main(){
    while(~scanf("%d",&N)&&N){
        scanf("%d%d",&M,&K);
        MM(E,0);MM(Match,-1);
        while(K--){
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            E[b][c] = 1;
        }
        int ans = 0;
        for(int i=1;i<N;i++){
            MM(V,0);
            if(dfs(i)) ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

网络流也可以解最大匹配:

不过代码长\red{不过代码长}不过代码长

// ShellDawn
// POJ1325
// No.30

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<math.h>
#define MM(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
//

#define maxn 210
int N,M,K;
int S,T;
struct Edge{
    int to;
    int v;
    int rvs;
    int pre;
};
Edge E[2019+maxn+maxn];
int pre[maxn];
int cnt;
int V[maxn];

void add(int from,int to,int v){
    E[cnt].to = to;
    E[cnt].v = v;
    E[cnt].rvs = cnt+1;
    E[cnt].pre = pre[from];
    pre[from] = cnt++;
    E[cnt].to = from;
    E[cnt].v = 0;
    E[cnt].rvs = cnt-1;
    E[cnt].pre = pre[to];
    pre[to] = cnt++;
}

bool BFS(int s){
    MM(V,0);
    queue<int> q;
    q.push(s);
    V[s] = 1;
    while(!q.empty()){
        int now = q.front();
        q.pop();
        for(int i=pre[now];i!=0;i=E[i].pre){
            if(E[i].v > 0 && V[E[i].to] == 0){
                V[E[i].to] = V[now] + 1;
                q.push(E[i].to);
            }
        }
    }
    if(V[T] > 0) return true;
    return false;
}

int DFS(int now,int minflow){
    if(now == T) return minflow;
    int flow = 0;
    for(int i=pre[now];i!=0 && minflow; i=E[i].pre){
        if(E[i].v > 0 && V[E[i].to] == V[now]+1){
            int f = DFS(E[i].to,min(minflow,E[i].v));
            minflow -= f;
            flow += f;
            E[i].v -= f;
            E[E[i].rvs].v += f;
        }
    }
    if(flow == 0) V[now] = 0;
    return flow;
}

int main(){
    while(~scanf("%d",&N)&&N){
        scanf("%d%d",&M,&K);
        S = N+M+1 ; T = N+M+2; cnt = 1; MM(pre,0);
        for(int i=0;i<N;i++) add(S,i,1);
        for(int i=N;i<N+M;i++) add(i,T,1);
        while(K--){
            int a,b;
            scanf("%*d%d%d",&a,&b);
            if(a==0 || b == 0) continue;
            add(a,b+N,1);
        }
        int ans = 0;
        while(BFS(S)) ans+=DFS(S,N);
        printf("%d\n",ans);
    }
    return 0;
}
结合混合A全局规划与MPC-iLQR执行器噪声和模型不匹配(MATLAB)的差动驱动机器人导航。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

改进差分进化算法及其求解柔性作业车间调度问题(Python代码实现)

内容概要:本文系统探讨了改进差分进化算法在求解柔性作业车间调度问题中的应用,并结合Python代码实现,展示了该算法相较于传统方法在全局搜索能力和收敛速度方面的优势。研究不仅聚焦于算法本身的改进策略,如变异、交叉和选择操作的优化,还深入分析了其在复杂制造环境中应对多目标、多约束调度问题的有效性。文中通过标准测试实例验证了算法性能,并与其他智能优化算法进行了对比分析,体现了其在实际工程应用中的潜力。此外,文档还关联了多无人机路径规划、电力系统状态估计、微电网优化、图像与信号处理等多个前沿技术领域,展现了智能优化算法在跨学科工程仿真与决策支持中的广泛适用性。; 适合人群:具备一定编程基础和工程背景,从事智能制造、自动化、工业工程、电气工程、控制科学与工程、计算机科学及相关领域的科研人员、高校研究生及企业研发技术人员。; 使用场景及目标:①为科研工作者提供可复现的智能优化算法代码框架,支持柔性作业车间调度、多无人机协同路径规划、电力系统优化等复杂工程问题的建模仿真;②辅助完成学术论文复现、课程设计、毕业设计或科研项目开发;③推动智能算法在生产调度、能源管理、交通规划等实际场景中的落地应用。; 阅读建议:建议读者结合文中提供的算法原理与代码实现,动手调试并验证不同参数设置对优化结果的影响,同时可参考荔枝科研社提供的完整资源包进行扩展学习与实践,以加深对算法机制与工程应用的理解。

No.32 - POJ2125 - 关于最小割的割边或割点

简单描述一下题目: 一个有向图,每个点删除入边有个权值,删除出边有另一个权值。则删除所有边最小权值? 所以,一条边有两种删除方式,要么选择起始点删出边,要么选择终止点删入边。显然是求分配方案。 关于分配方案,自然想到网络流,图中拆点,分为入边点,和出边点,这样权值也分离了,原来的边按逻辑连接对应入边点,和出边点。 这里我犹豫了好久,点权怎么处理。 网络流点权是一定要转化成边权的,一般点权有两种处理...

ShellDawn的博客 390

复现基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)

内容概要:本文聚焦于“基于改进秃鹰算法的微电网群经济优化调度”研究,提出一种改进的秃鹰优化算法(IBOA)以解决传统智能优化算法在求解过程中易陷入局部最优、收敛速度慢等问题。通过引入自适应权重、动态搜索机制及种群多样性保持策略,显著增强了算法的全局搜索能力和收敛精度。研究构建了包含光伏发电、风力发电、储能系统、可控负荷及电网交互的微电网群多主体协同调度模型,以系统综合运行成本最小化为目标函数,综合考虑功率平衡、设备出力能力、储能荷电状态、爬坡速率等多种实际约束条件。利用Matlab平台进行仿真验证,并与标准BOA、PSO、GA等经典智能算法进行对比,结果表明所提算法在降低系统运行成本、提高可再生能源消纳率及优化调度效率方面具有明显优势。; 适合人群:适用于具备电力系统基础、优化理论知识及Matlab编程能力的高校研究生、科研人员及从事微电网、综合能源系统优化调度相关工作的工程技术人员。; 使用场景及目标:①用于微电网群或多微网系统的经济调度建模与仿真;②开展新型智能优化算法的设计、改进与性能评估;③支撑含高比例可再生能源的配电系统优化运行决策; 阅读建议:建议结合提供的Matlab代码深入理解算法实现细节与调度模型构建过程,重点分析改进策略对优化性能的影响,并可通过替换场景参数或引入其他算法进行横向对比实验,进一步掌握智能优化在能源系统中的应用方法。【复现】基于改进秃鹰算法的微电网群经济优化调度研究(Matlab代码实现)

POJ:1737

楼教主男人八题中的第一题: 最大50座不同城市,组成全联通图的数量,不取模。 #include &amp;lt;cstdio&amp;gt; #include &amp;lt;cstring&amp;gt; #include &amp;lt;cmath&amp;gt; #include &amp;lt;string&amp;gt; #include &amp;lt;vector&amp;gt; #define maxn 5

ShellDawn的博客 379

改进-基于新扩展移相角下的双有源桥DAB变换器仿真(EPS调制、软开关、最小应力优化)(Simulink仿真实现)

内容概要:本文系统阐述了基于新扩展移相角的双有源桥(DAB)DC-DC变换器的先进仿真研究,聚焦于EPS调制策略、软开关技术实现及最小应力优化控制目标的协同设计。通过Matlab/Simulink平台构建双闭环控制系统模型,深入剖析变换器在高频隔离、双向功率传输场景下的动态响应特性与效率优化机制。该仿真方案复现了顶级EI期刊研究成果,具备高学术参考价值,并集成于一套完整的电力电子与新能源系统仿真资源体系中,涵盖微电网、PWM整流器、LLC谐振变换器、储能管理等多个关键技术方向,配套完整的仿真代码、设计文档与理论资料,支持深度学习与二次开发; 适合人群:面向电力电子、电气工程及其自动化、新能源科学与工程等领域的研究生、科研人员以及从事高性能DC-DC变换器研发的工程师,要求具备扎实的电路理论基础、电力电子拓扑分析能力及一定的Matlab/Simulink仿真实践经验; 使用场景及目标:①深入掌握DAB变换器的核心工作原理及其在EPS调制与软开关协同下的最优控制策略;②支撑高水平科研论文的复现、改进与创新性研究;③服务于硕士课题、博士研究或企业级新能源变换器产品的前期验证与算法开发; 阅读建议:建议结合文中提供的Simulink模型与引用的权威文献进行系统学习,重点理解控制架构设计、参数整定方法与优化算法实现路径,同时可横向对比其他电力电子变换器案例,拓展系统级工程思维与科研创新能力。

别再瞎猜了!Fluent瞬态计算时间步长到底设多少?一个公式+实战案例搞定

本文详细解析了Fluent瞬态计算中时间步长的设置方法,通过黄金公式和实战案例,帮助工程师准确确定时间步长,避免计算发散和资源浪费。文章还介绍了动态调整策略和典型工程场景的参数优化,提升仿真效率和精度。

weixin_42638178的博客 425

No.9 - POJ2240 Floyd求负权值环路

Floyd求环: // ShellDawn // POJ2240 // No.9 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<iostream> #include<map> #define MM(x) mems...

ShellDawn的博客 352

matinal:SAP ABAP 关于sftp的发送接收源代码

如果您将目标系统的凭据存储在该 RFC 连接中,您可以安排程序并将其作为后台作业运行:凭据将从 SM59 配置中获取,并且在文件传输期间不会提示您输入它们。这尤其适用于安全问题:您有责任为您的编码添加安全功能,并相应地配置您的系统(例如,保护您的系统免受病毒侵害)。注意:在创建自己的程序时,请特别注意示例代码中以“@CUSTOMER”开头的注释,因为您需要实现自己的逻辑。本说明为您提供示例编码以支持您创建自己的程序。在 STRUST 事务中,您维护了一个 PSE 并导入了您要发送的文件的最终收件人的证书。

matinal 當冬夜漸暖 。公众号:matinal 1333

POJ:1738

楼教主男人八题第二题,5W个叶子节点合并最小费用 最小权费和二叉树:GW算法 #include &amp;lt;cstdio&amp;gt; #include &amp;lt;cstring&amp;gt; using namespace std; #define maxn 50050 #define maxV 1000000001 int S = 1; int L = 0; long long V[maxn]; in...

ShellDawn的博客 351

【ADCU详解】PMIC电源管理集成电路详解

自动驾驶域控制器(ADCU)中的电源管理集成电路(PMIC)是高度集成的关键部件,负责为计算核心、传感器等提供高效稳定的多路电源。其核心特点包括:符合车规AEC-Q100标准、支持功能安全ASIL等级、精确的时序控制及强抗干扰能力。PMIC由开关稳压器、LDO、时序控制器、监控保护电路等模块组成,通过分层电源树框架实现电能分配。设计需考虑效率、功率密度、噪声性能等关键维度,底层基于Buck转换器和LDO原理工作。使用中需满足严苛的车规环境要求,并通过静态/动态测试及故障注入测试进行验证,确保系统可靠性和安全

qq_40844444的博客 841

LLM大模型-vLLM本地部署全流程:Windows WSL2环境安装、HuggingFace与Modelscope模型加载与本地运行、Docker化部署与镜像分发

vLLM本地部署大模型方案 vLLM是一款高性能大模型推理引擎,通过PagedAttention技术显著提升吞吐量和内存效率,支持低成本、高并发的本地部署。 核心优势: 性能卓越:吞吐量远超同类方案,支持连续批处理等高级功能 成本优化:减少GPU服务器需求 兼容性强:提供类OpenAI的简洁API 部署步骤: 硬件准备:需NVIDIA GPU(如A100/3090),显存≥模型参数量×2(7B模型需14GB) 软件环境: Linux系统或Windows WSL2 安装CUDA 12.1+和Python 3.

2202_75674969的博客 4565

POJ:1523

找关节点及其联通分量: Tarjan算法: /* Author:ShellDawn Date:2019-07-09 */ //#include<bits/stdc++.h> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define long ...

ShellDawn的博客 321

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

No.18 - POJ1386 判断联通 找欧拉链

首先判断是否为联通图 非联通图谈不上欧拉回路\red{非联通图谈不上欧拉回路}非联通图谈不上欧拉回路 欧拉链: 起始点,出度比入度多1 终止点,出度比入度少1 其他点,出度等于入度,所以出度加入度是偶数,满足欧拉回路规律。 cin&gt;&gt;string非常慢,字符串读取还是scanf(&quot;%s&quot;)大法好\orange{cin&gt;&...

ShellDawn的博客 321

面经-2023-禾赛-FPGA工程师

面经-2023-禾赛-FPGA工程师

w0shishabi的博客 2969

Python爬虫实战:利用Scrapy+Playwright高效爬取TED演讲数据

在当今信息爆炸的时代,TED演讲作为全球知名的思想传播平台,汇聚了各领域顶尖人才的精彩分享。对于数据分析师、研究人员或内容创作者来说,获取TED演讲的完整数据集具有重要价值。本文将详细介绍如何使用Python中最先进的爬虫技术组合——Scrapy框架配合Playwright浏览器自动化工具,高效爬取TED演讲的完整数据。传统爬虫技术在处理现代动态网页时面临诸多挑战,而本文将展示如何利用最新工具解决这些问题。

2201_76125261的博客 205

No.20 - POJ1780 咬尾蛇规律的数字排列

这是固定规律 n位首位相接组成n+10^n-1个数 则, 以n-1个0开始 以n-1个0结束 直接用dfs搜索,扩展,若扩展失败,一定是因为0,直接以1扩展即可。 // ShellDawn // POJ1780 // No.20 #include<cstdio> #include<iostream> #include<cstring> #include&l...

ShellDawn的博客 318

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

No.7 - POJ1679 克鲁斯卡尔 等权边 判断 MST唯一

kruskal判断MST唯一: 需要另外三个标记,k代表是否重边,u代表是否第一次使用,d代表删除该边 // ShellDawn // POJ1679 // No.7 #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #define MM(x) mem...

ShellDawn的博客 295

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

No.25 - POJ3308 实数网络流

构造图是关键 一个兵有两种耗费模式,要么Ri开销,要么Cj开销 自然想到源点到中间节点为Ri开销,中间节点到汇点为Cj开销,求最小割。 兵的关系如何表示? 伞兵没有带权值,所以只表示一种行和列的关联关系,所以想到中间节点分为Ri和Cj,每个伞兵链接Ri和Cj,正向边费用为INF,反向边费用为0。 关于反向边为什么为0\red{关于反向边为什么为0}关于反向边为什么为0:反向边的作用是修正之前伞兵的...

ShellDawn的博客 281

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

No.33 - POJ1523 邻接表Tarjan算法 找关节点

Tarjan算法核心: void dfs(int now,int v){ V[now] = low[now] = v; for(int i=pre[now];i!=0;i=E[i].pre){ if(V[E[i].to] == 0){ dfs(E[i].to,v+1); low[now] = min(low[now],...

ShellDawn的博客 280

No.16 - POJ1149 猪圈与顾客的匹配 最大流

最大流: 新增源点0,汇点N+1 从源点发出m条边,每条边容量为猪圈m的存货, 然后m条边依次流经每个有对应猪圈钥匙的顾客,顾客之间连边为INF, 若不同猪圈流经同一个顾客,则边权相加。 这些边代表猪圈存货的限制。 从每个顾客发出一条边指向汇点,边权为顾客需求。 这些边代表顾客需求的限制。 此时,在这张图上最大流即可。 // ShellDawn // POJ1149 // No.16 #incl...

ShellDawn的博客 275

No.19 - POJ1201 差分约束 多个不等式约束 50000个点

Bellman-Ford求差分约束。 cin超时,scanf才200ms,能用scanf不用cin\red{cin超时,scanf才200ms,能用scanf不用cin}cin超时,scanf才200ms,能用scanf不用cin // ShellDawn // POJ1201 // No.19 #include<cstdio> #include<algorithm> #...

ShellDawn的博客 266

No.14 - POJ2263 迪杰斯塔拉 求路径最大承重

Dijsktra + 贪心: // ShellDawn // POJ2263 // No.14 #include<algorithm> #include<cstring> #include<iostream> #include<map> #include<cstdio> #define MM(x) memset(x,0,sizeof(x...

ShellDawn的博客 263

No.26 - POJ1815 最小割点

网络流求最小割点,每个点分裂为入点和出点,边权为1 注:S,T分裂为边权为INF的两个点 出点到其它入点边权为INF // ShellDawn // POJ1815 // No.26 #include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #define MM...

ShellDawn的博客 261
上一篇: No.29 - POJ3422 最小费用最大流
下一篇: No.31- POJ1469 二部图最大匹配模版题
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值