【洛谷P6464】传送门

每天刷个一两题 比较值得写的会写在这里

P6464 [传智杯 #2 决赛] 传送门

题目描述

传智专修学院里有 \(n\) 栋教学楼,有 \(m\) 条双向通行道路连接这些教学楼,不存在重边和自环。每条道路都有一定的长度,而且所有教学楼之间都可以直接或者间接的通过道路到达。我们可以很容易的求出这些教学楼之间的最短路。

为了使交通更为顺畅,校方决定在两个教学楼里增设一对传送门。传送门可以将这对教学楼的距离直接缩短为 0。利用传送门,某些教学楼之间的最短路的距离就变短了。

由于预算有限,学校里只能安装一对传送门。但是校长希望尽可能方便学生,使任意两点之间的最短路长度的总和最小。当然啦,从 \(x\) 教学楼到 \(y\) 教学楼的长度和从 \(y\) 教学楼到 \(x\) 教学楼的长度只需要统计一次就可以了。

输入格式

输入第 1 行两个正整数 \(n,m(n\le 100,m\le\frac{1}{2}n(n-1))\),代表教学楼和道路数量。

接下来 \(m\) 行,每行三个正整数 \(x_i,y_i,w_i(0 <w_i \le 10^4)\),表示在教学楼 \(x_i\)\(y_i\) 之间,有一条长度为 \(w_i\) 的道路。

输出格式

输出一行,在最优方案下的任意点对的最短道路之和。

输入输出样例 #1

输入 #1

4 5
1 2 3
1 3 6
2 3 4
2 4 7
3 4 2

输出 #1

14

说明/提示

样例如图。当在 1 和 4 号教学楼架设一对传送门时,1 → 2 的最短路是 3,1 → 3 的最短路是 0+2,1 → 4 的最短路是 0,2 → 3 的最短路是 4,2 → 4 的最短路是 3+0,3 → 4 的最短路是 2,最短路之和是 14,是最佳方案。

解法&&个人感想

我们看到这个数据范围\(n<=100\)肯定是要用Floyd算法的 但是如果一一枚举传送门的话就会变成\(n^5\) 这个时间复杂度我们接受不了
所以 怎么办?
我们考虑上次看到的那个中转点思想 先跑一遍Floyd 然后枚举\(n^2\)的点对x,y作为传送门 对于最短路的两个起始点i,j,其距离被更新为原来最小值,i到x+y到j,i到y加x到j这三个的最小值,就将算法优化到\(n^4\)
下面我们看代码:

#include<bits/stdc++.h>
#define MAXN 105
#define MAXM 1e4+5
#define INF 1e8
#define ll long long
using namespace std;
int n,m;
int x,y,z;
int ma[MAXN][MAXN];
int tem[MAXN][MAXN];
ll res=INF;
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){ma[i][j]=INF;}}for(int i=1;i<=n;i++) ma[i][i]=0;for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);ma[x][y]=z;ma[y][x]=z;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){ma[i][j]=min(ma[i][j],ma[i][k]+ma[k][j]);}}}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){ll ans=0;for(int k=1;k<=n;k++){for(int v=1;v<=n;v++){tem[k][v]=ma[k][v];}}for(int k=1;k<=n;k++){for(int v=1;v<=n;v++){tem[k][v]=min(tem[k][v],min(tem[k][i]+tem[j][v],tem[k][j]+tem[i][v]));}}for(int k=1;k<=n;k++){for(int v=k+1;v<=n;v++){ans+=tem[k][v];}}res=min(res,ans);}}printf("%lld",res);system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906601.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高度混淆和多层嵌套的JSP案例免杀思路

免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任。 01 分析特征 目前webshell检测方式还是以检测特征为主,像JSP木马中常见的Runtime、ProcessBuilder、rea…

某项目三台设备PCIE Surprise Down故障分析

描述: 某项目交付过程中,发现三台服务器报The PCIe Card 1 (PCIe Device) triggered an uncorrectable error的错误(如下图)分析 通过fdm/fdm_output日志,发现存在大量的PCIe的报错(如下),可以看出来全是Surprise Down Error错误,且问题都说发生在CPU1 的Riser模组上检…

关联(Association), 聚合(Aggregation), 组合(Composition) 在软件设计模式中的区别

关联(Association)、聚合(Aggregation)与组合(Composition)的区别 这三种关系都是面向对象设计中描述类之间关系的重要概念,它们在耦合强度、生命周期管理等方面有显著差异。 1. 关联(Association) 基本特征:最通用的关系类型,表示类之间的使用关系可以是单向或双向的关联对…

H7-TOOL固件2.28发布,CAN, UART和RTT三合一同时收发且实时记录,脱机烧录新增革命性一键添加新芯片功能,新增多脱机芯片支持

H7-TOOL详细介绍(含操作手册): http://www.armbbs.cn/forum.php?mod=viewthread&tid=89934H7-TOOL PLUS电池版无需升级,预装的已经是最新的2.28版。后面还有个PLUS电池板低功耗运行模式,后续也将上线。【PC软件】V2.2.8 1. 脱机烧录功能更新:- 新增MAGTRON(巨磁智能)…

gitlab+jenkins+harbor+k8s安装操作流程之java项目打包成docker镜像

介绍在Java项目打包成Docker镜像时,通常需要写Dockerfile。Dockerfile是用来构建Docker镜像的文本文件,它包括了构建Docker镜像所需的所有命令和步骤 首先Maven先构建jar包 注意:dockerfile各个参数的解释如下

使用gradio生成图文理解界面

这里通过gradio来生成1个图文理解的界面,通过上传一张图片,则生成相应文本描述,即望图生义。 import gradiodef summarize(raw_image):model = xxxx()inputs = model.generate(raw_image)return tokenizer.decode(inputs)demo = gradio.Interface(fn=summarize,title="望图…

centos7 yum安装使用时提示Cannot find a valid baseurl for repo: base/7/x86_64

机器解析不了yum源,一般有三种原因: 1、无法上网,请检查网络ping www.baidu.com ping不通,机子没网,检查网络配置。能ping通检查第二种情况2、DNS配置有问题nslookup www.baidu.com ,如果显示无法连接无法解析就是有问题,确定能上网就换个dns!3、能上网并dns配置没…

使用带逗号分割的字符串填充el-input-tag

用户在文本框中输入1,2,3,4,5 ,然后直接转变成tag,如果输入错误,可以直接点击叉号关闭当前,前端代码实现如下: <template><el-input-tagref="inputRef"tag-type="primary"v-model="obj.model"clearable@paste.native="handleI…

时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现

在异常检测领域,尤其针对工业机械、核反应堆和网络安全等复杂系统,传统方法往往难以有效处理高维度且相互关联的数据流。多元状态估计技术(MSET) 与序贯概率比检验(SPRT) 的组合方法在此类场景中展现出显著优势。 MSET-SPRT是一种结合机器学习状态估计与统计假设检验的混合技…

windows 查看控制台编码

在 powershell 上 [System.Text.Encoding]::Default在 cmd 上 chcp

vue+nuxt项目安装sass时报错:error Cant add nuxt-app: invalid package version

搭建vue+nuxt项目时候,需要用到sass,执行yarn add sass --dev时,报错:error Cant add "nuxt-app": invalid package version。如图: 解决方法: 1.执行命令:yarn set version stable 2.执行命令,再次安装sass: yarn add sass --dev方法二: 1.执行命令:npm…

直击痛点!精准配药零误差!PROFINET转MODBUS网关助力药房升级

在医疗安全备受关注的今天,医院药房配液中心的每一滴药液、每一张标签都关乎患者的生命健康。传统配液流程中,设备间协议不兼容导致的数据传输延迟、标签信息错位等问题,成为药房效率与安全的“隐形风险”。如何打破设备孤岛,实现精准、高效的智能化配液管理?稳联技术 PRO…