Dijkstra 求最短路 最大流

使用dijkstra求解最小费用最大流网络 前言在介绍如何使用dijkstra算法求解最小费用最大流问题的时候,假设看这篇博文的读者已经知道什么是最小费用最大流问题及熟悉dijkstra单源最短路径算法。在这篇博文里面,我并不会过多强调网络拓扑是有向图和无向图,因为对于无向图来说,你可以简单将其看成两个点之间有一对有向边的有向图。经典求法求解最大最小费用最大流经常有两种方式: 1. 每次求出一条费用最小费用的增广路径pp,将其加到当前费用流 阅读详情
原来Dijkstra算法不光只能求最短路问题,还能求最大流问题~~~Dijkstra <wbr>求最短路 <wbr>最大流
最短路问题时,Dijkstra算法的基本思想:
 
邻接矩阵w[x][y]保存x和y间的距离(别的设为INF,表示不连通,设为-1也行,后来更新加一个if(w[x][y]>=0)),数组d保存通过已经确定的点从起点到每个点的最短路。初始化d[0]=0,别的都是INF。循环n次,每次确定一个点,最后的d[n]就是答案。
 怎么每次确定一个点呢?就是在所有还未确定的点中找到d最小的点。因为如果d[x]是剩下的里面最小的,x这个点的最短路已经被确定(假设通过别的点再到x,起点到别的点路径本来就比到x长,再加上那个点到x的距离就更长了。。)找到x之后把x标记为访问,然后对于所有从x出发的边(x,y),更新d[y]=min(d[y],d[x]+w[x][y])。
Dijkstra算法只能用于边权均为正的情况。复杂度O(N^2)

具体代码:

memset(vis,0,sizeof(vis));
int i;
for(i=0; i<n; i++) d[i]=(i==0?0:INF);
for(i=0; i<n; i++)
{
    int x,y,m=INF;
    for(y=0; y<n; y++) if(!vis[y]&&d[y]<=m) m=d[x=y];
    vis[x]=1;
    for(y=0; y<n; y++) d[y]=d[y]<d[x]+w[x][y]?d[y]:d[x]+w[x][y];
}



若要打印节点,只要把d[y]=d[y]<d[x]+w[x][y]?d[y]:d[x]+w[x][y]改成
if(d[y]>d[x]+w[x][y])
{
   d[y]=d[x]+w[x][y];
   fa[y]=x;
}

但是又怎么用Dijkstra求最大流呢?其实也是每次确定一个点,更新此时每个点能通过的最大流。初始化d[0]=INF(一开始有无穷大的流),别的都是-1(代表没有)。不连通的w[x][y]也设为-1。每次循环找到d最大的点(能允许的流最大),更新的时候注意是d[y]=d[y]>min(d[x],w[x][y])?d[y]:min(d[x],w[x][y])。
总之就是把原来的最小都换成现在的最大。。

POJ 1797
Heavy Transportation
Time Limit: 3000MS Memory Limit: 30000K
Total Submissions: 17277 Accepted: 4536

Description

Background
Hugo Heavy is happy. After the breakdown of the Cargolifter projecthe can now expand business. But he needs a clever man who tells himwhether there really is a way from the place his customer has buildhis giant steel crane to the place where it is needed on which allstreets can carry the weight.
Fortunately he already has a plan of the city with all streets andbridges and all the allowed weights.Unfortunately he has no ideahow to find the the maximum weight capacity in order to tell hiscustomer how heavy the crane may become. But you surely know.

Problem
You are given the plan of the city, described by the streets (withweight limits) between the crossings, which are numbered from 1 ton. Your task is to find the maximum weight that can be transportedfrom crossing 1 (Hugo's place) to crossing n (the customer'splace). You may assume that there is at least one path. All streetscan be travelled in both directions.

Input

The first line contains the number of scenarios(city plans). For each city the number n of street crossings (1<= n <= 1000) and number m of streetsare given on the first line. The following m lines contain triplesof integers specifying start and end crossing of the street and themaximum allowed weight, which is positive and not larger than1000000. There will be at most one street between each pair ofcrossings.

Output

The output for every scenario begins with a linecontaining "Scenario #i:", where i is the number of the scenariostarting at 1. Then print a single line containing the maximumallowed weight that Hugo can transport to the customer. Terminatethe output for the scenario with a blank line.

Sample Input

1
3 3
1 2 3
1 3 4
2 3 5

Sample Output

Scenario #1:
4



代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int map[1010][1010],d[1010],vis[1010],n,m;
int min(int a,int b)
{
    return a<b?a:b;
}
void dijkstra()
{
    memset(vis,0,sizeof(vis));
    int i;
    for(i=1; i<=n; i++) d[i]=(i==1?1000000:-1);
    for(i=1; i<=n; i++)
    {
        int x,m=-1,y;
        for(y=1; y<=n; y++) if(!vis[y]&&d[y]>m) m=d[x=y];
        vis[x]=1;
        for(y=1; y<=n; y++) if(map[x][y]>=0&&!vis[y])d[y]=d[y]>min(d[x],map[x][y])?d[y]:min(d[x],map[x][y]);
    }
}
int main()
{
    int N,T;
    scanf("%d",&N);
    for(T=1; T<=N; T++)
    {
        int a,b,c;
        memset(map,-1,sizeof(map));
        memset(vis,0,sizeof(vis));
        scanf("%d%d",&n,&m);
        while(m--)
        {
            scanf("%d%d%d",&a,&b,&c);
            map[a][b]=map[b][a]=c;
        }
        dijkstra();
        printf("Scenario #%d:\n",T);
        printf("%d\n",d[n]);
        if(T<N) puts("");
    }
    return 0;
}

To_Heart—总结——最小费用流 dijkstra+EK 前言 因为害怕 SPFA 哪天就死了,所以好好学习天天向上的学习 dijkstra 吧! 最小费用流 dijkstra+EK 因为费用有可能是负数,但我们 可爱 的 dijkstradijkstradijkstra 并不能处理负的边权,所以我们需要利用 JohnsonJohnsonJohnson 算法中的势函数: 我们对于每一个点定义一个势函数 hhh,把每条边权 wiw_iwi​ 改为 wi+hi−hjw_i+h_i-h_jwi​+hi​−hj​,其中 hih_ihi​ 和 hjh_jhj​ 表示这条边的 阅读详情

相关推荐

数学建模十大算法04—图论算法(最短路径、最小生成树、最大流问题、二分图)

数学建模图论相关的算法。包括最短路径问题、最小生成树、最大流问题等。

Serendipity_zyx的博客 2万+

图论基础----最大流,最短路

主要知识点来自清风建模,本文稍加总结 在动态规划之前先回顾一下最短路问题的求法以及一个图的构建方法 s = [9 9 1 1 2 2 2 7 7 6 6 5 5 4 ]; t = [1 7 7 2 8 3 5 8 6 8 5 3 4 3 ]; w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9 ]; G = digraph(s,t,w); %其实这一步储存的数据一个节点集合,一个赋权集合(n*3) plot(G, 'EdgeLabel', G.Edges.Weight,

weixin_54905771的博客 1216

蓝桥杯算法入门第19讲:最短路

值得一提的是,如果边长有两个值:1或者0,此时也可以用BFS,不过,此时执行BFS的是双向队列(头尾都可进可出),而不是普通队列(尾进头出)。原因很简单,如果边长为0,说明u和v应该看成处于同一层(到起点s的距离相同),那么只要把v放在队头,就和u同一层了。有现实的模型,即问路。在最短路问题中,边的权值是“可加性参数”,例如费用、长度等等,它们是“可加的”,一条路径上的总权值,是这条路径上所有边的权值之和。树是一种特殊的图,树的所有点是连通的,两点之间只有一条路径,点和边的数量关系是n=m+1。

zzjlhlcd的博客 1048

lingo求解最短路和最大流问题

运筹领域有很多有趣的问题,比如中国邮递员问题,最短路问题等等。lingo在求解规划问题、图与网络问题,对策决策问题,以及存储论等方面的求解有很好的应用。最短路问题 model: sets: cities/A,B1,B2,C1,C2,C3,D/; roads(cities,cities)/A B1,A B2,B1 C1,B1 C2,B1 C3,B2 C1, B2 C2,B2 C3,C1 D,C2 D,

LSEC小陆的博客 1万+

Spring Boot整合Apache Hop 2.3.0实战:从零搭建数据管道(附完整代码)

本文详细介绍了如何在Spring Boot项目中整合Apache Hop 2.3.0,从零开始构建可嵌入的数据管道。内容涵盖环境初始化、依赖配置、管道设计,并通过完整代码示例演示了如何通过REST API触发执行,实现数据同步与ETL流程的自动化管理,为微服务架构提供灵活的数据集成方案。

web99的专栏 632

CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式

由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。

shmily_i的博客 1939

最小费用最大流 + dijkstra 模版(处理负边)

概念: 在同一个网络中,可能存在多个总流量相同的最大流,我们可以在计算流量的基础之上,给网络中的弧增加一个单位流量的费用(简称费用),在确保流量最大的前提下总费用最小——最小费用最大流。 #pragma GCC optimize(2) #include <iostream> #include <algorithm> #include <queue&gt...

恒持此志成永志 1278

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 666

图解迪杰斯特拉(Dijkstra)最短路径算法

【干货满满!】在介绍最短路径之前我们首先要明白两个概念:什么是源点,什么是终点?在一条路径中,起始的第一个节点叫做源点;终点:在一条路径中,最后一个的节点叫做终点;注意!源点和终点都只是相对于一条路径而言,每一条路径都会有相同或者不相同的源点和终点。而最短路径这个词不用过多解释,就是其字面意思:在图中,对于非带权无向图而言,从源点到终点边最少的路径(也就是BFS广度优先的方法);而对于带权图而言,从源点到终点权值之和最少的路径叫最短路径;最短路径应用:道路规划;我们最关心的就是去实现寻找最短路径,通过实现.

ZER00000001的博客 7万+

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 773

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5767

最短路算法的证明_最短路问题的简便算法

2001最短路问题的简便算法(二)任运平(运城高等专科学校数学系山西运城044000)摘要本文分别给出了一种比E·W·Dijkstra最短路算法更为方便的求最短路的算法和一种求最大流-最小费用的简便计算方法。关键词最短路最短路最大流中图分类号O157.5文献标识码:A文章编号:1008-8008(2001)03-0003-2一、基本理论设有网络N,V1和Vn分别是网络的起点和终点,网络中任意一边〔...

weixin_39784263的博客 137

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5204

[最短路] Milk Pumping G

Port key 我是真的没想到这题能最短路 全往费用流上想去了 还是学得太少 这题其实一看就不是费用流 费用流要求在最大流前提下的最小费用 而这道题不一定能够最大流 题意 一个图,每条边有限制fff和代价ccc,maximize(min⁡i{fi}∑ci)maximize(\frac{\min_i\{f_i\}}{\sum c_i})maximize(∑ci​mini​{fi​}​) 题解 将ccc视为边权,求最短路 考虑fff的影响 发现可以枚举fff,因为它小 (随便欺负人家小是不对的????) O(

Antimonysbguy的博客 334

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1991

使用Simulink来模拟多旋翼无人机在风扰动条件下的飞行情况,并分析其稳定性

本教程详细介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先构建包含飞行器动力学模型、控制系统和环境模拟模块的系统框架,重点讲解简化动力学方程的实现方法。随后指导设计PID控制器来维持姿态稳定,并添加随机风扰动模型模拟环境干扰。通过设置输入信号和输出显示,最终实现对不同风速条件下无人机控制性能的评估。该实例为无人机控制系统设计提供了实用的仿真方法,强调利用MATLAB工具进行可视化分析和参数优化,以提高系统抗干扰能力和稳定性。

amy_mhd的博客 418

uva1376-Animal Run(最小割+对偶图+最短路)

title: uva1376-Animal Run(最小割+对偶图+最短路) date: 2019-06-04 16:27:49 categories: ACM tags: [ACM,算法] 我图论好菜啊 我的个人博客:https://www.kimiye.xyz 题目描述 动物园动物要逃跑了,在每个路口有3条路可以走(横、竖、斜),现在给出每条路上警察需要派w个人就能堵住这条路,问最少需要...

Flyyy‘s blog 368

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【ACM模板】~持续更新

1、组合公式+逆元阶乘打表 void init(){ fact[0]=inv[1]=factinv[0]=inv[0]=fact[1]=factinv[1]=1; for(int i=2;i&amp;amp;amp;lt;=MAXN;i++){ fact[i]=(fact[i-1]%mod*i%mod)%mod; inv[i]=(mod-mod/i)*inv[mod%i]%mod; factinv[i]=...

duanghaha的博客 296

WINCC7.3破解文件

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

个人模板总结

目录前言黑科技缺省源暴力的艺术bitset用法合集应用举例(与埃氏筛结合)vector图论最短路dijkstraSPFA(放入队列中的同时vis[s]=1,取出的同时vis[now]=0,更新所有可以更新的,更新的时候放入所有能放入的即vis[x]=0的x)Floyd最短路径树(应用)最短路径树计数模板(最短路径数计数模板题):去掉途中一条边之后最短路径树大小(dis之和)是否有变化暂时就以上两个应用吧,毕竟自己没遇到过最短路计数模板分层图最短路(用分层图的几种情况)用分层图的几种情况例题1:小雨坐地铁题目

I_have_a_world的博客 1247

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数学建模系列-优化模型(二)---图论模型(三)

本文考虑的是自最费用最大流问题。 最大流问题的标号法: 1.对初始点找有裕量的下一跳,用深度优先一路走下去,一直到终点为止,那么取这条路最小的一段的裕量。当然裕量也包括反向可以减少的量。 2.将这个裕量更新到这条路经的每个点上。 3.重复1,一直到找不到再有通往终点的裕量为止。那么此时就是最大流量。 最大流量最小费用问题: 将其分为两个不同的问题: 1.最小费用(加权距离) 2.最大流量(用标号算法)。 一般的思路是可以用D斯特拉算法对最小费用进行求解。再求出最消费用的路线后求解最大流。 1.清空流量,找出

Caiersaru的博客 487

图论板子(不确定正不正确)

i = edges[i].nxt)//limit > 0 余量优化。if (pre[v] == -1 || dfs(pre[v])) //女主之前没有配偶或者女主配偶可以成全他俩。//如果允许出现重边的话,那么可以直接用邻接矩阵g[u][v]做标记较好,否则可以动态数组。// u=neck;if (dfs(u)) //如果找到原配了,那么组合加1。

2301_79609200的博客 674

基础算法板子(更新中)

ps:最近比较忙,以后会把以前落的补了 拓扑排序(时间复杂度N^3): const int maxn = (int)5e2 + 10; int G[maxn][maxn]; int vis[maxn]; int n,m; void toposort() { for (int i = 1;i <= n;i ++) { for (int j = 1;j <= n;j ++) ...

cloudy_happy的博客 988

dijkstra 堆优化 最短路并且最大或最小费用

dijkstra 堆优化 最短路 点上费用

m0_74039681的博客 180

图&网络模型应用:最短路问题、 Dijkstra算法 、Floyd算法

图&网络系列博文: 【1】图与网络模型及方法:图与网络的基本概念 【2】图&网络模型应用—最短路径问题 【3】树:基本概念与最小生成树 【4】匹配问题: 匈牙利算法 、最优指派、相等子图 【5】Euler 图和 Hamilton 图 【6】计划评审方法和关键路线法【统筹方法】:广泛地用于系统分析和项 目管理 【7】最小费用流及其求法 : 【8】最大流问题 【9...

冷月无声的博客 1万+

hdu3416——最短路+最大流

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3416 Do not sincere non-interference。 Like that show, now starvae also take part in a show, but it take place between city A and B. Starvae is in city A...

mumei的博客 438

Tricks Device (最大流 , 最短路)

Tricks DeviceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1516 Accepted Submission(s): 364Problem Description Innocent Wu follows Dumb Z

u013823561的博客 539
下一篇: 归并排序求逆序对数
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值