每日刷题(图论)
P1119 灾后重建
P1119 灾后重建 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


思路
看数据范围知道需要用到Floyd算法,但是道路是不能直接用的,需要等到连接道路的两个村庄重建好才可以使用,所以这需要按照时间依次加入中转点,再更新dis数组。
代码
#include<bits/stdc++.h>
#define int long long
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
const int N = 1e6 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 100003;
using namespace std;
int f[201][201];
int n, m;
int a[201];void solve() {cin >> n >> m;for (int i = 0; i < n; i++) cin >> a[i];for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){f[i][j] = inf;}}for (int i = 0; i < m; i++){int x, y, z;cin >> x >> y >> z;f[x][y] = f[y][x] = z;}int q;cin >> q;int now = 0;for (int i = 0; i < q; i++){int x, y, t;cin >> x >> y >> t;if (a[x] > t || a[y] > t){cout << "-1\n";continue;}while (a[now] <= t&&now<n){for (int j = 0; j < n; j++){for (int k = 0; k < n; k++){f[k][j]=f[j][k] = min(f[j][k], f[j][now] + f[now][k]);}}now++;}if (f[x][y] == inf) cout << "-1\n";else cout << f[x][y] << "\n";}
}
signed main() {ios;solve();return 0;
}
P6464 [传智杯 #2 决赛] 传送门
P6464 [传智杯 #2 决赛] 传送门 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路
这道题需要我们使用Floyd算法,因为计算全源最短路径需要三层循环,但是没完枚举传送门的建设也需要两重循环,五重循环必定超时,所以我们需要将它优化成四重循环,我们发现建设传送门时只对以传送门建设点为中转点的边有影响,所以我们可以优化为四重循环。
代码
#include<bits/stdc++.h>
#define inf 1234567890
using namespace std;
int n,m,mp1[120][120],mp2[120][120],ans=inf;
void back()//返回原图
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){mp2[i][j]=mp1[i][j];}}
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mp1[i][j]=inf;for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;mp1[x][y]=mp1[y][x]=z;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(mp1[i][k]<inf&&mp1[k][j]<inf)//先计算没有建立传送门的最短路径 mp1[i][j]=min(mp1[i][j],mp1[i][k]+mp1[k][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){back();//每次返回原图 mp2[i][j]=mp2[j][i]=0;//建立传送门 for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][j]<inf&&mp2[j][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][j]+mp2[j][y]);}}for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][i]<inf&&mp2[i][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][i]+mp2[i][y]);}}int cnt=0;for(int x=1;x<=n;x++){for(int y=x+1;y<=n;y++){cnt+=mp2[x][y];//计算最短路径和 }}ans=min(ans,cnt);//更新最小 }}cout<<ans<<endl;return 0;
}
P2349 金字塔
P2349 金字塔 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路
最短路模板题,但是需要维护最大值,一开始我将答案全部储存在dis数组里面,结果只得40分
int n, m, head[N], cnt;
int mxx[N];
struct node
{int u, v, w;
}e[N];
void add(int x, int y, int z) {e[++cnt].u = y;e[cnt].w = z;e[cnt].v = head[x];head[x] = cnt;
}void solve()
{cin >> n >> m;for (int i = 1; i <= m; i++) {int x, y, z;cin >> x >> y >> z;add(x, y, z);add(y, x, z);}vector<int>dis(n + 1, inf);dis[1] = 0;priority_queue<pll>q;q.emplace(0, 1);while (q.size()) {auto it = q.top();q.pop();int x = it.second;for (int i = head[x]; i; i = e[i].v) {int now = e[i].u;mxx[now] = max(mxx[x], e[i].w);if (dis[now] > e[i].w + dis[x] + mxx[now] - mxx[x]) {dis[now] = e[i].w + dis[x] + mxx[now] - mxx[x];q.emplace(-dis[now], now);}}}cout << dis[n] << '\n';
}
所以我们需要用两个数组来维护答案最小值,dis数组和维护的边权最大值,下面是AC代码。
代码
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<algorithm>
#define int long long
#define pb push_back
#define TEST int T; cin >> T; while (T--)
#define ios ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define lowbit(x) x&(-x)
#define pll pair<int,int>
const int N = 3e5 + 30;
const int M = 1e3 + 10;
const int inf = 512785182741247112;
const int mod = 1e9 + 7;
using namespace std;
int n, m, head[N], cnt;
int mxx[N];
struct node
{int u, v, w;
}e[N];
void add(int x, int y, int z) {e[++cnt].u = y;e[cnt].w = z;e[cnt].v = head[x];head[x] = cnt;
}void solve()
{cin >> n >> m;for (int i = 1; i <= m; i++) {int x, y, z;cin >> x >> y >> z;add(x, y, z);add(y, x, z);}vector<int>dis(n + 1, inf);dis[1] = 0;priority_queue<pll>q;q.emplace(0, 1);while (q.size()) {auto it = q.top();q.pop();int x = it.second;for (int i = head[x]; i; i = e[i].v) {int now = e[i].u;if (dis[now] +mxx[now]> e[i].w + dis[x] + max(e[i].w,mxx[x])) {mxx[now] = max(e[i].w, mxx[x]);dis[now] = e[i].w + dis[x];q.emplace(-(dis[now]+mxx[now]), now);}}}cout << dis[n]+mxx[n] << '\n';
}signed main() {ios;solve();return 0;
}
相关文章:
每日刷题(图论)
P1119 灾后重建 P1119 灾后重建 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 看数据范围知道需要用到Floyd算法,但是道路是不能直接用的,需要等到连接道路的两个村庄重建好才可以使用,所以这需要按照时间依次加入中转点,…...
Requestium - 将Requests和Selenium合并在一起的自动化测试工具
Requests 是 Python 的第三方库,主要用于发送 http 请求,常用于接口自动化测试等。 Selenium 是一个用于 Web 应用程序的自动化测试工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 本篇介绍一款将 Requests 和 Seleniu…...
mysql和pg等数据库之间的数据迁移实战分享
mysql和pg等数据库之间的数据迁移是常见的问题:比如一开始使用Oracle,后来想使用mysql,而且需要把Oracle数据库的数据迁移到mysql里面;后期有想使用pg数据库,同时需要把Mysql数据库的数据迁移到pgl里面,等等…...
消息中间件都有哪些
RabbitMQ:这可是一个开源的消息代理软件,也叫消息中间件。它支持多种消息传递协议,可以轻松地在分布式系统中进行可靠的消息传递。 Kafka:Apache Kafka是一个分布式流处理平台,它主要用于处理实时数据流。Kafka的设计初…...
数据结构(3)内核链表
一、内核链表 内核链表是一种在操作系统内核中使用的数据结构,主要用于管理和组织内核对象。它是有头双向链表的一种实现。 内核链表的特点 双向链表: 内核链表的每个节点都包含指向前一个节点和后一个节点的指针,这使得在链表中进行插入和删除操作时更…...
Linux 硬件学习 s3c2440 arm920t蜂鸣器
1.查找手册时钟图,输入12m想要通过pll得到400m的信号 2.对比pll值,找到最近的为405,得到pll中mdiv为127,pdiv为2,sdiv为1 3.想要得到fclk400,hclk100,pclk50,对比分频比例࿰…...
提交保存,要做重复请求拦截,避免出现重复保存的问题
**问题:**前端ajax提交数据的时候,当频繁点击的时候,或者两个账号以相同数据创建的时候,会出现问题。 **处理办法:**前端拦截,防止重复提交数据,在上一次请求返回结果之后才允许提交第二次&…...
华为 HCIP-Datacom H12-821 题库 (3)
有需要题库的可以看主页置顶 1.运行 OSPF 协议的路由器在交互 DD 报文时,会使用以下哪一个参数选举主从关系? A、接口的 IP 地址 B、接口的 DR 优先级 C、Area ID D、Router ID 答案:D 解析: Router-ID 大的为主&a…...
spring-boot 事件
事件触发时机常用监听器描述ApplicationStartingEvent应用启动时LoggingApplicationListener:决定加载哪个日志系统ApplicationEnvironmentPreparedEvent创建Environment之后BootstrapApplicationListener:加载spring-cloud bootstrap配置文件࿱…...
合碳智能 × Milvus:探索化学合成新境界——逆合成路线设计
合碳智能(C12.ai)成立于2022年,致力于运用AI和具身智能技术,为药物研发实验室提供新一代智能化解决方案,推动实验室从自动化迈向智能化,突破传统实验模式与人员的依赖,解决效率和成本的瓶颈&…...
二分查找 | 二分模板 | 二分题目解析
1.二分查找 二分查找的一个前提就是要保证数组是有序的(不准确)!利用二段性! 1.朴素二分模板 朴素二分法的查找中间的值和目标值比较 while(left < right) // 注意是要: < {int mid left (right -left) / 2;…...
uni-app应用更新(Android端)
关于app更新,uni-app官方推荐的是 uni-upgrade-center,看了下比较繁琐,因此这里自己实现检查更新并下载安装的逻辑。 1.界面效果 界面中的弹框和 进度条采用了uView 提供的组件 2.检查更新并下载安装 一、版本信息配置在服务端,…...
JavaEE(2):前后端项目之间的交互
现在,在网页中通过超链接,表单就可以向后端发送请求,后端也可以正常响应内容。 以前通过表单访问后端的请求方式称为同步请求 同步请求 当网页与后端交互时,前端不能再进行其他操作 服务器端响应回来的内容,会把整个浏…...
(已开源-CVPR 2024)YOLO-World: Real-Time Open-Vocabulary Object Detection
169期《YOLO-World Real-Time Open-Vocabulary Object Detection》 You Only Look Once (YOLO) 系列检测模型是目前最常用的检测模型之一。然而,它们通常是在预先定义好的目标类别上进行训练,很大程度上限制了它们在开放场景中的可用性。为了解决这一限制…...
Spring6梳理4——SpringIoC容器
以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 4.1 前言 4.2 IoC容器 4.2.1 控制反转(IoC) 4.2.2 依赖注入 4.2.3 IoC容器在Spri…...
SpringBoot2:请求处理原理分析-FORM表单请求接口
一、RESTFUL简介 Rest风格支持(使用HTTP请求方式,动词来表示对资源的操作) 以前:/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在: /user GET-获取用户 DELETE-删除用户 PUT-修改…...
Monkey日志ANR、CRASH、空指针异常及其他异常数据分析
引言 在Android开发过程中,monkey测试是一种常用的随机测试手段,用于模拟用户的各种操作来发现应用中的稳定性问题。通过monkey测试生成的日志文件包含了丰富的信息,包括应用程序崩溃(Crash)、无响应(ANR&…...
Vue 3结合Element Plus中,实现一个级联选择器(Cascader)来展示省市区
在Vue 3结合Element Plus中,实现一个级联选择器(Cascader)来展示省市区(甚至到更细分的级别,如街道、小区等)的联动选择是一个常见的需求。Element Plus的Cascader组件非常适合这样的场景,因为它…...
使用卫星仿真软件STK的一些应用和思考(星地链路、星间链路)
目录 任务描述利用STK建模星地协同系统3个GEO高轨卫星240/20/1 Walker-Star Constellation 低轨卫星星座地面站或者地面设备 链路建模与数据提取处理星地链路星间链路数据读取的几种方法最麻烦的方法使用Matlab与STK互联接口使用大规模使用Chain 总结 任务描述 在一个星地协同…...
pytorch对不同的可调参数,分配不同的学习率
在 PyTorch 中,你可以通过为优化器传递不同的学习率来针对不同的可调参数分配不同的学习率。这通常通过向优化器传递一个字典列表来实现,其中每个字典指定特定参数组的学习率。下面是一个示例代码,展示了如何实现这一点: import …...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
使用VMware克隆功能快速搭建集群
自己搭建的虚拟机,后续不管是学习java还是大数据,都需要集群,java需要分布式的微服务,大数据Hadoop的计算集群,如果从头开始搭建虚拟机会比较费时费力,这里分享一下如何使用克隆功能快速搭建一个集群 先把…...
