博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络提速(最短路)
阅读量:6823 次
发布时间:2019-06-26

本文共 2031 字,大约阅读时间需要 6 分钟。

codevs——1243 网络提速

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
  
题目描述 
Description

某学校的校园网由n(1<=n<=50)台计算机组成,计算机之间由网线相连,如图5。其中顶点代表计算机,边代表网线。正如你所见,不同网线的传输能力不尽相同,例如计算机1与计算机2之间传输信息需要34秒,而计算机2与计算机3之间的传输信息只要10秒。计算机1与计算机5之间传输信息需要44秒,途径为机1到机3到机5。

现学校购买了m(1<=m<=10)台加速设备,每台设备可作用于一条网线,使网线上传输信息用时减半。多台设备可用于同一条网线,其效果叠加,即用两台设备,用时为原来的1/4,用三台设备,用时为原来的1/8。如何合理使用这些设备,使计算机1到计算机n传输用时最少,这个问题急需解决。校方请你编程解决这个问题。例如图5,若m=2,则将两台设备分别用于1-3,3-5的线路,传输用时可减少为22秒,这是最佳解。

输入描述 
Input Description

第一行先输入n,m。以下n行,每行有n个实数。第i行第j列的数为计算机i与计算机j之间网线的传输用时,0表示它们之间没有网线连接。注意输入数据中,从计算机1到计算机n至少有一条网路。

 

输出描述 
Output Description

输出计算机1与计算机n之间传输信息的最短时间。(保留两位小数)

样例输入 
Sample Input

5 2

0 34 24 0 0

34 0 10 12 0

24 10 0 16 20

0 12 16 0 30

0 0 20 30 0

样例输出 
Sample Output

22.00

 

思路:先对整体进行处理,然后跑一遍最短路(我用的是spfa),在这个spfa中加上dp来解决这道题。

首先:我们在这里存边的时候我们使用的是一个三维数组,用a[i][j][0]存我们输入的每条边的边权。

        从a[i][j][1]到a[i][j][k]存的是我们如果在这条边上使用k个加速器后产生的效果。(当然,里面边不相连的权值赋成极大值,这样就方便我们后面用来跑spfa)

然后这样我们就把一个比较复杂的问题转化成了一个比较简单的问题了。

对于这个问题我们就可以看作一个简单的spfa了。

但是别高兴的太早,我们并不是就这个样子就可以A掉这个题的哦,我们还要再加一点东西。

注意:spfa里面跑的是三重循环,第一重循环跑起点,第二重循环跑的是使用的加速器的个数。

代码:

#include
#include
#include
#include
#include
#define N 100#define M 20#define oo 1234567using namespace std;int n,m,q[N*N];double dis[N][M],a[N][N][M];bool b[N]={
0};int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f;}void spfa(){ int head(0),tail(1),u; q[1]=1; b[1]=1; do { head++; u=q[head]; b[u]=0; for (int i=1;i<=n;i++) if (i!=u) for (int j=0;j<=m;j++)//从1到u使用j个加速器 for (int k=0;k<=m-j;k++)//从u到i使用k个加速器,同时要保证j+k<=m if (dis[u][j]+a[u][i][k]

转载于:https://www.cnblogs.com/z360/p/6850139.html

你可能感兴趣的文章
[Server] 服务器配置SSH登录邮件通知
查看>>
ceph 添加新硬盘删除旧的OSD
查看>>
Kubernetes 的安全机制 APIServer 认证、授权、准入控制
查看>>
杨老师课堂之Nginx学习之反向代理
查看>>
阿里云GPU云服务器
查看>>
自定义Dialog之旅程(二)理解Dialog大小
查看>>
最伟大的程序员高德纳: 谈计算机程序设计艺术
查看>>
利用Xamaria构建Android应用-公交发车信息屏
查看>>
Android自定义注解(一)
查看>>
Java并发编程-AQS
查看>>
修复网站漏洞对phpmyadmin防止被入侵提权的解决办法
查看>>
Android Studio 中无法下载com.android.tools.build:gradle:3.0.1
查看>>
@程序员,拒绝无聊的代码面试!
查看>>
学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
查看>>
媒体处理 MTS-基础问题
查看>>
在Centos 7上安装Docker
查看>>
c# 守护进程,WPF程序自守护
查看>>
Android permission 动态申请、授权
查看>>
HBase的引出
查看>>
WPF 绘制对齐像素的清晰显示的线条
查看>>