uva10594 - Data Flow 无向图的最小费用

VMware 安装 Windows11 一、下载win11的镜像文件 可以在MSDN网站下载: MSDN系统库-致力于原版windows生态服务 二、创建虚拟机 1.双击打开VMware虚拟机,点击创建新的虚拟机 2.选择典型(推荐),然后点击下一步 3.在安装程序光盘映像文件下,点击浏览按钮,选择Windows 11ISO镜像文件所在的路径,在Windows 11安装文件路径中不要有中文或其他特殊符号,否则有可能引起错误。然后点击下一步 4.在选择客户机操作系统界... 阅读详情

Problem F

Data Flow

Time Limit

5 Seconds

 

In the latest Lab of IIUC, it requires to send huge amount of data from the local server to the terminal server. The lab setup is not yet ready. It requires to write a router program for the best path of data. The problem is all links of the network has a fixed capacity and cannot flow more than that amount of data. Also it takes certain amount of time to send one unit data through the link. To avoid the collision at a time only one data unit can travel i.e. at any instant more than one unit of data cannot travel parallel through the network. This may be time consuming but it certainly gives no collision. Each node has sufficient buffering capability so that data can be temporarily stored there. IIUC management wants the shortest possible time to send all the data from the local server to the final one.

 

 

For example, in the above network if anyone wants to send 20 unit data from A to D, he will send 10 unit data through AD link and then 10 unit data through AB-BD link which will take 10+70=80 unit time.

 

Input

Each input starts with two positive integers N (2 ≤ N ≤ 100), M (1 ≤ M ≤ 5000). In next few lines the link and corresponding propagation time will be given. The links are bidirectional and there will be at most one link between two network nodes. In next line there will be two positive integers D, K where D is the amount of data to be transferred from 1st to N'th node and K is the link capacity. Input is terminated by EOF.

Output

For each dataset, print the minimum possible time in a line to send all the data. If it is not possible to send all the data, print "Impossible.". The time can be as large as 1015.

 

Sample Input

Output for Sample Input

4 5
1 4 1
1 3 3
3 4 4
1 2 2
2 4 5
20 10
4 4
1 3 3
3 4 4
1 2 2
2 4 5
20 100
4 4
1 3 3
3 4 4
1 2 2
2 4 5
20 1
80
140
Impossible

  上次那个dijkstra,dijkstra就是求无向图的最小费用,但是那个是特殊情况,若找到最短增广路,增广的值肯定是1,下次若再经过相同的边,增广值也是1,就相当于把上次经过的流退回去。所以每次把增广路上的cost变成负的就行了。

  但在一般的无向图情况下,就必须要用链接表了(还不能是vector),两个方向分别建边。因为还要建残量边,就相当于两个点之间要建4个边,分2组,每组前一个容量是cap,花费cost,后一个(残量边)容量是0,花费-cost。边的编号前一个是偶数,后一个是奇数,这样更新flow的时候就可以方便的用^。

  还有个区别是在记录路径的时候,不光要p[v]=u,还要多一个数组,设为pe,如果编号为i的边更新了d[v],则pe[v]=i。最后找增广值和更新流量的时候操作的是e[i].flow,e[i].cap(代替里连接矩阵时候的flow[p[u]][u],cap[p[u]][u])。


#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#define LLINF 1000000000000100
#define INF 0x3f3f3f3f
#define MAXN 110
#define MAXM 5010
#define eps 1e-9
using namespace std;
int N,M,D,K,id;
int x[MAXM],y[MAXM],head[MAXN],inq[MAXN],p[MAXN],pe[MAXN];
long long cost[MAXM],d[MAXN],ans;

struct edge{
    int v,cap,flow,next;
    long long w;
}e[4*MAXM];

void add_edge(int u,int v,int cap,long long w){
    e[id].next=head[u];
    e[id].v=v;
    e[id].cap=cap;
    e[id].w=w;
    e[id].flow=0;
    head[u]=id++;
}
int min_cost(){
    queue<int> q;
    int f=0,s=0,t=N;
    while(1){
        memset(inq,0,sizeof(inq));
        for(int i=0;i<=N;i++) d[i]=(i==s?0:LLINF);
        d[s]=0;
        q.push(s);
        while(!q.empty()){
            int u=q.front();
            q.pop();
            inq[u]=0;
            for(int i=head[u];i!=-1;i=e[i].next){
                int v=e[i].v;
                if(e[i].cap>e[i].flow&&d[v]>d[u]+e[i].w){
                    d[v]=d[u]+e[i].w;
                    p[v]=u;
                    pe[v]=i;
                    if(!inq[v]){
                        q.push(v);
                        inq[v]=1;
                    }
                }
            }
        }
        if(d[t]==LLINF) break;
        long long a=LLINF;
        for(int u=t;u!=s;u=p[u]){
            int i=pe[u];
            if(e[i].cap-e[i].flow<a) a=e[i].cap-e[i].flow;
        }
        for(int u=t;u!=s;u=p[u]){
            int i=pe[u];
            e[i].flow+=a;
            e[i^1].flow-=a;
        }
        f+=a;
        ans+=d[t]*a;
    }
    return f;
}
int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF){
        int i;
        for(i=0;i<M;i++) scanf("%d%d%lld",&x[i],&y[i],&cost[i]);
        scanf("%d%d",&D,&K);
        id=0;
        ans=0;
        memset(head,-1,sizeof(head));
        for(i=0;i<M;i++){
            add_edge(x[i],y[i],K,cost[i]);
            add_edge(y[i],x[i],0,-cost[i]);
            add_edge(y[i],x[i],K,cost[i]);
            add_edge(x[i],y[i],0,-cost[i]);
        }
        add_edge(0,1,D,0);
        add_edge(1,0,0,0);
        if(min_cost()==D) printf("%lld\n",ans);
        else printf("Impossible.\n");
    }
    return 0;
}



KRC文件——编程中的重要文件 KRC文件是指KUKA机器人控制器(KUKA Robot Controller)所使用的文件格式。KUKA是一家知名的机器人制造商,其机器人控制器通过KRC文件来管理和执行机器人程序。KRC文件包含了机器人的运动指令、逻辑控制、传感器数据等信息,以及与机器人相关的配置参数。这些文件通常使用KRL(KUKA Robot Language)编写,是一种特定的编程语言。KRC文件具有扩展名为.krc的格式,可以在KUKA机器人控制器上直接加载和执行。 阅读详情

相关推荐

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 426

【POJ2135】无向图最小费用最大流

【POJ2135】 题目大意 给出一个无向图,每条边有边权,求从 1-&gt;n-&gt;1 的最短路径 分析 从1走到n和从n走到一是等价的(因为是无向图) 问题就转化为求两条从1走到n的不相交路径,并且最小化路径长度 可以构造出一个网络,每条边容量是1费用是边权,起始边容量为2费用为0,跑一边最小费用流即可 Code #include&lt;bits/stdc++.h&gt;...

Shelter 1718

从贝叶斯网络到结构因果模型:因果推理在可解释AI中的实践

在机器学习和数据分析领域,理解变量间的因果关系而不仅仅是统计关联,是构建可信赖、可解释系统的关键。概率图模型,特别是贝叶斯网络,通过有向无环图和条件概率表,能够高效地编码和推理变量间的条件依赖关系,广泛应用于医疗诊断、风险评估等场景。然而,贝叶斯网络主要刻画的是“是什么”的关联,难以回答“如果…会怎样”的因果问题。为了进行因果推断,需要引入结构因果模型和do-演算,它们通过定义结构方程和模拟干预操作,能够区分混杂效应,估计处理变量对结果变量的净因果影响。这一套方法论对于可解释人工智能至关重要,它能生成反事实

weixin_42168902的博客 379

加权无向图问题--最小代价生成树(Prim算法、kruskal算法)

加权无向图的实现 加权无向图的实现最简单的方法是扩展无向图的表示方法:在邻接表的表示中,可以在链表的结点中增加一个权重域。但这里用另一个方法来实现:我们实现两个类,权重边类和无向图类。无向图类中组合权重边类来实现加权无向图。 权重边类: public class Edge imple...

霍淇滨的博客 916

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6440

【iOS开发】dyld: Symbol not found: ___chkstk_darwin 问题解决

【iOS开发】dyld: Symbol not found: ___chkstk_darwin 问题解决 Xcode 13.2.1 运行到iOS12.x版本上崩溃报错如下:dyld: Symbol not found: ___chkstk_darwin dyld: Symbol not found: ___chkstk_darwin Referenced from: /private/var/containers/Bundle/Application/A424CEFD-51DB-450E-9D62-B8

wm9028的专栏 6563

uva10594 (无向图的最小费用流)

题目大意: 给出每条边可以承载的最大容量,然后给出连接的边和他们的费用。 求是否可以以最小的费用将指定重量的东西载到对面。思路: 最小费用最大流。 因为是无向图的证明可以来回走, 只要添加从u到v的边再添加从v到u的边就可以了。 有向图中添加反向边的原因是可以反悔走过的路。代码:#include <iostream> using namespace std; #include <cstr

不努力只能看别人脸色。 746

CentOS 7.9安装python3.11

CentOS 7.9安装python3.11

leafseelight的专栏 1342

无向图基本算法 -- 遍历及最小生成树算法

1. 无向图图的表示2. 无向图遍历算法3. 最小生成树算法4. 代码下载1. 无向图表示下面的代码中使用的无向图的表示方法和有向图中表示相同。如下:2.无向图遍历算法无向图的遍历算法和有向图是类似,具体可以常见上一篇有向图的介绍。3. 最小生成树算法3.1 基本概念在表示最小生成树之前,首先定义最小生成树。设图G= (V, E),对于其中的每条边(u, v) 属于E,定义函数w...

weixin_30538029的博客 331

FPGA网络调试实战:基于88E1111和DP83867两款PHY芯片的SGMII-UDP数据回环对比与避坑指南

本文深入对比了88E1111与DP83867两款PHY芯片在SGMII-UDP数据回环中的性能差异,涵盖硬件设计、Vivado工程配置及调试技巧。通过实测数据揭示DP83867在吞吐量、延迟和功耗方面的优势,并提供FPGA网络调试中的常见问题解决方案,助力工程师高效完成项目开发。

weixin_31682031的博客 383

YOLOv13必学核心:SKAttention选择性核注意力机制原理 + 实战全拆解

SKAttention的核心思想来源于人类视觉系统的一个重要特性:根据不同的视觉刺激,人眼能够自适应地调整感受野大小。SKAttention将这一生物学原理转化为深度学习中的注意力机制,通过动态选择和融合不同大小的卷积核,实现了自适应的多尺度特征提取。在人类视觉皮层中,不同的神经元具有不同大小的感受野,而且这些感受野的大小会根据视觉刺激的类型动态调整。本文将深入解析SKAttention模块的设计原理、数学基础、实现细节,以及其在YOLOv13目标检测框架中的集成应用,为读者提供全面而深入的技术理解。

FJN110的博客 96

HDU 1599 find the mincost route【floyd 最小环】

Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至除了出发点以外至少要经过2个其他不同的景区,而且不能重复经过同一个景区。现在8600需要你帮他找一条这样的路线,并且花费越少越好。 Input 第一行是2个整数...

weixin_33800593的博客 260

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 827

UVA10594 Data Flow 无向图的最小费用流

https://www.luogu.com.cn/problem/UVA10594 题目大意:题面太长就不放了,其实就是给定了一张无向图,每条边的流量是一个定值,同时有一个权值,问总共DDD个数据能否从顶点111传输到顶点nnn,若能则输出花费的最小时间,否则输出Impossible.Impossible.Impossible. 思路:很明显的费用流,建图也很简单,把顶点000当作源点,给000到...

xiji333的博客 373

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

无向图的最小费用最大流问题 UVa 10594 - Data Flow

无向图的最小费用最大流问题 预备知识:最大流问题,增广路算法,有向图的最小费用最大流问题。 问题说明:把物品从结点s(称为源点)运送至结点t(称为汇点),连接结点u和结点v的无向边上有两个二元组(x,y)和(x’,y’),x表示边u->v的最大运送能力,y表示边u->v运送单位物品的花费,x’表示边v->u的最大运送能力,y’表示边v->u运送单位物品的花费(其中,x可以等于x’,y可以等于y’)。

zhihua_oba的博客 2589

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UVa 10594 - Data Flow(无向图的最小费用最大流问题)

题目链接:UVa 10594 - Data Flow 这道题是无向图的最小费用最大流问题,看清楚是无向图的。这么说无向图和有向图的费用流问题有什么区别呢?主要是反向边的问题。首先我们说一下最大流问题中的反向边,我们需要将其cap[u][v]=0表示容量为0,而在费用流问题中添加了费用,所以肯定不能像之前那么简单处理了,那怎么办呢?在有向图中,没有存在的反向边我们用cap[u][v]=0表示容量为

fobdddf的专栏 8625

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

UVA - 10594 Data Flow (最小费用最大流)

题目大意: 在无向图G中把D单位的数据从1号点传到N号点,每条边允许传输数据的最大容量均为K,给出每条边传输单位数据的费用,求最小传输D单位数据的费用。 解析: 注意是无向图,必然要用邻接表,将无向边分成两个方向的有向边。1为源点,N为汇点,求流量为D的最小费用,因为费用为D,则用0到1的容量为D,表示初始的费用。 然后套模板,求出0~n的最小费用。 总结:照着模板敲代码,我

小G的ACM之路 842

uva 10594 - Data Flow(费用流)

题目链接:uva 10594 - Data Flow 题目大意:给出一张图,然后给出K和D,D表示每条路的容量,然后由点1到点n运送数据,流量为K时的最小费用。 解题思路:和uva 10806 - Dijkstra, Dijkstra.做法一个样.....表示说不解释,就在起点0和1之间加条容量为K的路就好。 #include #include #incl

不慌不忙、不急不躁 2150

UVA 10594 Data Flow

无向图费用流 还有一段话摘自别人博客 这道题是无向图的最小费用最大流问题,看清楚是无向图的。这么说无向图和有向图的费用流问题有什么区别呢?主要是反向边的问题。首先我们说一下最大流问题中的反向边,我们需要将其cap[u][v]=0表示容量为0,而在费用流问题中添加了费用,所以肯定不能像之前那么简单处理了,那怎么办呢?在有向图中,没有存在的反向边我们用cap[u][v]=0表示容量为0,...

deko2014的博客 143

UVa10594 Data Flow(最小费用 最大流)

这道题是一道最小费用最大流问题,从这道题里面,我更加理解什么是最小费用最大流了,主要就是在找最短路径的同时,还要顾及到最大流量及残余网络,其实就是在残余网络中找最短路径 有一下要注意的: 第一,边的两个方向,费用互为相反数 第二,无向图的最小费用最大流,要用邻接表表示,因为点和点之间的两个方向的边要分别表示其反方向,也就是这两边是独立的,不能用互为反边的思想,否则会出现环路,而且会无限循环,

AClion的专栏 1083

UVa 10594 Data Flow(无向图的费用流)

题目链接:UVa 10594 Data Flow 无向图的费用流。 无向图,则必须使用邻接表,这样才能解决反向边的问题。 加一个点0,表示为起点,设置cap[0][1]=D(题目给的流量D),cost[0][1]=0。显然到终点的最大流量不可能超过D,那么小于D的话表示不可解,等于D表示有解。 #include #include #include #include using

fobdddf的专栏 637

uva 10594 Data Flow (最小费最大流+题目给的数据有错)

uva 10594 Data Flow题目大意:给出一张图,以及D, K,D代表所要传送的数据量,K代表每条边可以传送的数据量(就是容量),问在可以传送所有数据的前提下,最小耗费时间。解题思路:建一个超级源点连向源点1,容量为D,然后求该图的最小费最大流。最后将求出的最大流与D比较,比D小输出inpossible,否则输出最小费。#include <cstdio> #include <cstring

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 865

uva 10594 Data Flow(最小费用流)

uva 10594 Data Flow (最小费用流) 题目大意: 运输数据从1到n,每条路的花费告诉你,以及路线的流量限定告诉你,问你最小花费 解题思路: 是一题裸的最小费用流,只不过是双向的,应该拆边。 解题代码:见文章

炒饭君的博客 1857

UVA 10594 Data Flow (最小费用流)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=116&page=show_problem&problem=1535  Problem F Data Flow Time Limit 5 Seconds   I

fcbruce 1134

uva 10594 Data Flow

最小费用最大流:无向图(所以必须用邻接表)+当流量为D时的最小费用(即限制流量在D,求最大流) 题意:就是给你一个无向图,给出所有的无向边和它们的单位费用(题中说了不会有平行边),然后给出D,K,K是指每条无向边的容量固定为K,然后问当流量为D时最小费用是多少,如果流量无法得到D这个数值,那么就输出Impossible. 解决这个问题的方法就是限制流量,加一个新的源点(或者汇点,道理一样),增...

weixin_33816611的博客 114
上一篇: uva563 - Crimewave 拆点+链接表的最大流
下一篇: uva10158 - War 并查集判断同伙的两种方法
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值