当前位置: 首页 > news >正文

【图论】最短路应用

1135. 新年好

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

MarkDown视图Copy

重庆城里有 nn 个车站,mm 条 双向 公路连接其中的某些车站。

每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。

在一条路径上花费的时间等于路径上所有公路需要的时间之和。

佳佳的家在车站 11,他有五个亲戚,分别住在车站 a,b,c,d,ea,b,c,d,e。

过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送去节日的祝福。

怎样走,才需要最少的时间?

输入格式

第一行:包含两个整数 n,mn,m,分别表示车站数目和公路数目。

第二行:包含五个整数 a,b,c,d,ea,b,c,d,e,分别表示五个亲戚所在车站编号。

以下 mm 行,每行三个整数 x,y,tx,y,t,表示公路连接的两个车站编号和时间。

输出格式

输出仅一行,包含一个整数 TT,表示最少的总时间。

数据范围

1≤n≤500001≤n≤50000,
1≤m≤1051≤m≤105,
1<a,b,c,d,e≤n1<a,b,c,d,e≤n,
1≤x,y≤n1≤x,y≤n,
1≤t≤1001≤t≤100

输入样例:

Copy

6 6
2 3 4 5 6
1 2 8
2 3 3
3 4 4
4 5 5
5 6 2
1 6 7
输出样例:

Copy

21
#include<iostream>
#include<cstring>
#include<queue>
#define pii pair<int,int>
using namespace std;
#define INF 0x3f3f3f3f
const int M=100010;const int N=50010;
struct EDGE{int next;int to;int w;
}edge[2*M];int tot=0;
int n,m;int head[N];
void add(int u,int v,int w){edge[++tot].next=head[u];edge[tot].to=v;edge[tot].w=w;head[u]=tot;
}int ans=INF;
int A[6];
int dis[6][6];
void dijk(int ss){int s=A[ss];int dist[N];bool st[N]={0};memset(dist,INF,sizeof(dist));priority_queue<pii,vector<pii>,greater<pii>>heap;heap.push({0,s});dist[s]=0;while(!heap.empty()){pii temp=heap.top();heap.pop();int x=temp.first;int y=temp.second;if(st[y])continue;st[y]=1;for(int i=head[y];~i;i=edge[i].next){//cout<<"jin"<<endl;int v=edge[i].to;if(dist[v]>x+edge[i].w){dist[v]=x+edge[i].w;heap.push({dist[v],v});}}}for(int i=0;i<=5;i++){dis[ss][i]=dis[i][ss]=dist[A[i]];}
}int B[6];bool book[6];
void dfs(int step){if(step==6){int res=0;//cout<<"B";for(int i=1;i<=5;i++){// 1 2 3 4 5dfs编号//B 亲戚 1 2 3 4 5 编号//A 结点编号//cout<<A[B[i]]<<" ";//cout<<dis[B[i-1]][B[i]]<<" ";res+=dis[B[i-1]][B[i]];}//cout<<res<<endl;ans=min(ans,res);return ;}for(int i=1;i<=5;i++){if(!book[i]){book[i]=1;B[step]=i;dfs(step+1);book[i]=0;}}}int main(){cin>>n>>m;memset(head,-1,sizeof(head));A[0]=1;for(int i=1;i<=5;i++)cin>>A[i];while(m--){int u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,w);}for(int i=0;i<=5;i++){dijk(i);}B[0]=0;dfs(1);cout<<ans<<endl;}

 

340. 通信线路

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

MarkDown视图Copy

在郊区有 NN 座通信基站,PP 条 双向 电缆,第 ii 条电缆连接基站 AiAi 和 BiBi。

特别地,11 号基站是通信公司的总站,NN 号基站位于一座农场中。

现在,农场主希望对通信线路进行升级,其中升级第 ii 条电缆需要花费 LiLi。

电话公司正在举行优惠活动。

农产主可以指定一条从 11 号基站到 NN 号基站的路径,并指定路径上不超过 KK 条电缆,由电话公司免费提供升级服务。

农场主只需要支付在该路径上剩余的电缆中,升级价格最贵的那条电缆的花费即可。

求至少用多少钱可以完成升级。

输入格式

第 11 行:三个整数 N,P,KN,P,K。

第 2..P+12..P+1 行:第 i+1i+1 行包含三个整数 Ai,Bi,LiAi,Bi,Li。

输出格式

包含一个整数表示最少花费。

若 11 号基站与 NN 号基站之间不存在路径,则输出 −1−1。

数据范围

0≤K<N≤10000≤K<N≤1000,
1≤P≤100001≤P≤10000,
1≤Li≤10000001≤Li≤1000000

输入样例:

Copy

5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6
输出样例:

Copy

4
难度:中等
时/空限制:1s / 64MB
总通过数:14023
总尝试数:27405
来源:

《算法竞赛进阶指南》USACO2008

算法标签

分层图 

#include<iostream>
using namespace std;
#include<cstring>#define ll long long
#define INF 0x3f3f3f3f
#include<queue>
#define pll pair<ll,ll>
ll n,m,k;
const ll M=10010*4*1010;
const ll N=1010*1010;
struct EDGE{ll next;ll to;ll w;
}edge[2*M];
ll head[N];ll tot=0;
void add(ll u,ll v,ll w){
edge[++tot].next=head[u];
edge[tot].to=v;
edge[tot].w=w;
head[u]=tot;
}ll dist[N];bool st[N];
void dijk(ll s){memset(dist,INF,sizeof(dist));priority_queue<pll,vector<pll>,greater<pll>> heap;heap.push({0,s});dist[s]=0;while(!heap.empty()){pll temp=heap.top();heap.pop();ll d=temp.first;ll u=temp.second;if(st[u])continue;st[u]=1;for(ll i=head[u];~i;i=edge[i].next){ll v=edge[i].to;//一个可以被更新dist[v]>//被更新为多少max(d,)if(dist[v]>max(d,edge[i].w)){dist[v]=max(d,edge[i].w);heap.push({dist[v],v});}}}
}int  main(){cin>>n>>m>>k;memset(head,-1,sizeof(head));while(m--){ll u,v,w;cin>>u>>v>>w;for(ll j=1;j<=k;j++){add(u+(j-1)*n,v+j*n,0);add(v+(j-1)*n,u+j*n,0);}for(ll j=0;j<=k;j++){add(u+j*n,v+j*n,w);add(v+j*n,u+j*n,w);}}dijk(1);ll ans=INF;for(ll j=0;j<=k;j++){ans=min(ans,dist[n+j*n]);}cout<<ans;
}

二分+dijk 

#include<iostream>
using namespace std;
#include<queue>
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#include<cstring>
const int M=10010;
const int N=1010;
int n,m,k;
struct EDGE{int next;int to;int w;
}edge[2*M];
int head[N];int tot=0;
void add(int u,int v,int w){edge[++tot].next=head[u];edge[tot].to=v;edge[tot].w=w;head[u]=tot;
}bool check(int mid){priority_queue<pii,vector<pii>,greater<pii>> heap;bool st[N]={0};int dist[N];memset(dist,INF,sizeof(dist));heap.push({0,1});dist[1]=0;while(!heap.empty()){pii temp=heap.top();heap.pop();int d=temp.first;int u=temp.second;if(st[u])continue;st[u]=1;for(int i=head[u];~i;i=edge[i].next){int v=edge[i].to;int w=(edge[i].w>mid);if(dist[v]>d+w){dist[v]=d+w;heap.push({dist[v],v});}}}//mid大,比他大的就会少return dist[n]<=k;}int main()
{memset(head,-1,sizeof(head));cin>>n>>m>>k;while(m--){int u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,w);}int l=0,r=1e7+10;while(l<r){int mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1;}if(l==1e7+10)cout<<-1;else cout<<l;
}

 

 

342. 道路与航线

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

MarkDown视图Copy

农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查。

他想把牛奶送到 TT 个城镇,编号为 1∼T1∼T。

这些城镇之间通过 RR 条道路 (编号为 11 到 RR) 和 PP 条航线 (编号为 11 到 PP) 连接。

每条道路 ii 或者航线 ii 连接城镇 AiAi 到 BiBi,花费为 CiCi。

对于道路,0≤Ci≤10,0000≤Ci≤10,000;然而航线的花费很神奇,花费 CiCi 可能是负数(−10,000≤Ci≤10,000−10,000≤Ci≤10,000)。

道路是双向的,可以从 AiAi 到 BiBi,也可以从 BiBi 到 AiAi,花费都是 CiCi。

然而航线与之不同,只可以从 AiAi 到 BiBi。

事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策:保证如果有一条航线可以从 AiAi 到 BiBi,那么保证不可能通过一些道路和航线从 BiBi 回到 AiAi。

由于约翰的奶牛世界公认十分给力,他需要运送奶牛到每一个城镇。

他想找到从发送中心城镇 SS 把奶牛送到每个城镇的最便宜的方案。

输入格式

第一行包含四个整数 T,R,P,ST,R,P,S。

接下来 RR 行,每行包含三个整数(表示一个道路)Ai,Bi,CiAi,Bi,Ci。

接下来 PP 行,每行包含三个整数(表示一条航线)Ai,Bi,CiAi,Bi,Ci。

输出格式

第 1..T1..T 行:第 ii 行输出从 SS 到达城镇 ii 的最小花费,如果不存在,则输出 NO PATH

数据范围

1≤T≤250001≤T≤25000,
1≤R,P≤500001≤R,P≤50000,
1≤Ai,Bi,S≤T1≤Ai,Bi,S≤T

输入样例:

Copy

6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
输出样例:

Copy

NO PATH
NO PATH
5
0
-95
-100

 

相关文章:

【图论】最短路应用

1135. 新年好 题目 提交记录 讨论 题解 视频讲解 MarkDown视图Copy 重庆城里有 nn 个车站&#xff0c;mm 条 双向 公路连接其中的某些车站。 每两个车站最多用一条公路连接&#xff0c;从任何一个车站出发都可以经过一条或者多条公路到达其他车站&#xff0c;但不同的…...

Spring Boot实战:使用策略模式优化商品推荐系统

在现代电子商务平台中&#xff0c;个性化的商品推荐系统是提升用户体验和增加销售额的关键。本文将通过一个Spring Boot实战项目&#xff0c;展示如何利用Java的设计模式——策略模式&#xff0c;来优化商品推荐系统。同时&#xff0c;我们将探讨Spring Boot中的一个重要特性&a…...

Navicat导入Sql文件至Mysql数据库,事务失效

Mysql 版本&#xff1a;8.0.39 Navicat 版本&#xff1a;17.x、16.x 结论&#xff1a; Navicat 导入sql文件&#xff0c;事务不会生效&#xff0c;无论怎么设置 mysql.exe 导入sql文件&#xff0c;事务生效 测试 准备一张表 name约束不能为空&#xff0c;用于测试事务失败…...

篮球运动场景物体检测系统源码分享

篮球运动场景物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…...

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍 Docker 中文网址: https://www.dockerdocs.cn Docker Hub官方网址&#xff1a;https://hub.docker.com Docker Hub中MySQL介绍&#xff1a;https://hub.docker.com/_/mysql ​ 切换到“Tags”页面&#xff0c;复制指定的MySQL版本拉取命令&#xff0c;例如 &#xff1a…...

git reflog

git reflog 是一个非常有用的命令&#xff0c;可以让你查看和回滚到 Git 仓库中的任何之前的状态。reflog 记录了你在 Git 仓库中的所有 HEAD 移动历史。下面是使用 reflog 回滚到之前状态的步骤&#xff1a; 1. 查看 Reflog 首先&#xff0c;你需要查看 reflog 记录&#xf…...

使用 Vue 3 和 TypeScript 实现带打字效果的仿 AI 分析展示组件

在这篇博客中&#xff0c;我将分享如何用 Vue 3 和 TypeScript 实现一个带打字效果的 AI 分析展示组件。该组件具有如下功能&#xff1a; 动态打字效果&#xff1a;模拟打字机逐步显示内容。自动滚动&#xff1a;内容超出容器高度时自动滚动到最新位置。 1. 组件实现需求 我…...

数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)

目录 一、安装所需的python包二、采用K-NN算法进行缺失值填充2.1代码&#xff08;完整代码关注底部微信公众号获取&#xff09;2.2以某个缺失值数据进行实战2.2.1代码运行过程截屏&#xff1a;2.2.2填充后的数据截屏&#xff1a; 三、K 近邻算法 (K-Nearest Neighbors, KNN) 介…...

爬虫----webpack

目录 一. 什么是webpack 出现的原因&#xff1a;同名函数 概念: 特征&#xff1a;大量缩进 webpack的格式 简单的webpack格式&#xff1a; 详细的webpack格式&#xff1a; 几个参数的运用 1. webpack数组形式 2. webpack对象格式 3.多个js文件打包 打印要扣的代码 …...

Spring Mybatis PageHelper分页插件 总结

1.简介 使用分页插件可以帮助我们自动分页&#xff0c;不用手动在写sql的分页逻辑。 2.配置步骤 在pom.xml中添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.11<…...

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…...

解决Gson将长数字( json字符串)转换为科学记数法格式

Gson&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…...

php环境搭建教程

PHP环境搭建教程 在构建和开发PHP应用程序时&#xff0c;搭建一个稳定、高效的PHP环境是基础且关键的一步。本教程将详细介绍如何在不同操作系统&#xff08;Windows和Linux&#xff09;上搭建PHP环境&#xff0c;包括Apache服务器的安装与配置、PHP的安装与配置、MySQL的安装…...

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService&#xff0c;支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目&#xff0c;然后在解决方案资源管理器的Connected Services节点点右键&#xff0c;选择管理连接的服务菜单。 点击下图圈红处…...

【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…...

快手视频怎么保存到相册?(详细操作)

随着短视频的流行&#xff0c;快手已经成为越来越多人日常生活的一部分。无论是搞笑片段、旅行记录&#xff0c;还是生活点滴&#xff0c;用户们每天都会在快手上浏览到大量有趣的视频。有时候&#xff0c;我们会遇到特别想保存的视频&#xff0c;想要分享到朋友圈&#xff0c;…...

为什么 ECB 模式不安全

我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式&#xff0c;所以也就用不着初始化向量&#xff0c;那么相同的明文分组就会被加密成相同的密文分组&#xff0c;而且每个分组运算都是独立的&#xff0c;这也就意味着可以并行提高运算效率&#xff0c;但也正是…...

『功能项目』事件中心处理怪物死亡【55】

本章项目成果展示 我们打开上一篇54回调函数处理死亡的项目&#xff0c; 本章要做的事情是用事件中心处理怪物死亡后的逻辑 首先打开之前事件中心脚本&#xff08;不做更改&#xff0c;调用即可&#xff09;&#xff1a; using System.Collections.Generic; using UnityEngine…...

一个安卓鸿蒙化工具

DevEco插件&#xff0c;为已有安卓项目鸿蒙化加速。 目前支持&#xff1a; 1、安卓Vector Assets转svg&#xff1b; 2、json转ets model&#xff1b; 3、kotlin model转ets model&#xff1b; 下载地址&#xff1a;andtoharplugin1.1.0 安装&#xff1a; deveco插件安装选硬…...

PyQt5库学习之QFileDialog.getExistingDirectory函数

PyQt5库学习之QFileDialog.getExistingDirectory函数 一、简介 QFileDialog.getExistingDirectory 是 PyQt5 中的一个函数&#xff0c;它提供了一个标准的目录选择对话框&#xff0c;允许用户选择一个已存在的目录。这个函数是 QFileDialog 类的一部分&#xff0c;通常用于打开…...

SpringAI(GA):Nacos2下的分布式MCP

原文链接地址&#xff1a;SpringAI(GA)&#xff1a;Nacos2下的分布式MCP 教程说明 说明&#xff1a;本教程将采用2025年5月20日正式的GA版&#xff0c;给出如下内容 核心功能模块的快速上手教程核心功能模块的源码级解读Spring ai alibaba增强的快速上手教程 源码级解读 版…...

虚实共生时代的情感重构:AI 恋爱陪伴的崛起、困局与明日图景

一、虚拟恋人&#xff1a;从技术幻想到情感刚需的跨越 在 5G 网络编织的数字浪潮里&#xff0c;AI 驱动的虚拟恋人正打破次元界限。深度学习算法剖析 3000 万段真实对话语料库&#xff0c;搭配 VR 设备带来的多维度交互体验&#xff0c;如今的虚拟对象已能精准模拟瞳孔微表情&…...

家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种

基于用户历史订单&#xff08;如“每周一次保洁”&#xff09;、设备状态&#xff08;如智能门锁记录的清洁频率&#xff09;&#xff0c;自动生成服务计划。 结合天气数据&#xff08;如“雨天推荐玻璃清洁”&#xff09;&#xff0c;动态推送服务套餐。 IoT设备联动&#x…...

生物发酵展同期举办2025中国合成生物学与生物制造创新发展论坛

一、会议介绍 2025中国合成生物学与生物制造创新发展论坛暨上海国际合成生物学与生物制造展览会于2025年8月7-9日在上海新国际博览中心&#xff08;浦东新区龙阳路2345号&#xff09;召开&#xff0c;本次论坛汇聚了国内外顶尖学者、行业领袖及政策制定者&#xff0c;将围绕“…...

【vue】Uniapp 打包Android 文件选择上传问题详解~

需求 uniapp兼容android app&#xff0c;pc&#xff0c;h5的文件选择并上传功能。 需要支持拍照和相册选择&#xff0c;以及选择其他类型文件上传~ 实践过程和问题 开始使用uni-file-picker组件 以为很顺利&#xff0c;android模拟器测试…… 忽略了平台兼容性提示~&#…...

YOLO11解决方案之分析

概述 Ultralytics提供了一系列的解决方案&#xff0c;利用YOLO11解决现实世界的问题&#xff0c;包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 Ultralytics提供了三种基本的数据可视化类型&#xff1a;折线图&#xff08;面积图&#xf…...

协程的常用阻塞函数

以下是一些常见的阻塞函数示例&#xff1a; 1. **Thread.sleep()** 阻塞当前线程一段时间。 kotlin Thread.sleep(1000) // 阻塞线程 1 秒 2. **InputStream.read()** 从输入流中读取数据时会阻塞&#xff0c;直到有数据可用或流结束。 kotlin val inputStream FileInputStre…...

GOOUUU ESP32-S3-CAM 果云科技开发板开发指南(一)(超详细!)Vscode+espidf 通过摄像头拍摄照片并存取到SD卡中,文末附源码

看到最近好玩的开源项目比较多&#xff0c;就想要学习一下esp32的开发&#xff0c;目前使用比较多的ide基本上是arduino、esp-idf和platformio&#xff0c;前者编译比较慢&#xff0c;后两者看到开源大佬的项目做的比较多&#xff0c;所以主要学习后两者。 本次使用的硬件是GO…...

CMS、G1、ZGC、Shenandoah 的全面对比

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; Java 垃圾回收器从最早的 Serial 一步步演化&#xff0c;如今已经有了多款高性能、低延迟的 GC 垃圾收集器可选&#xff0c;比如 CMS、G1、…...

前端杂货铺——TodoList

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...