每日刷题(图论)
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 …...
电脑死机解决方法
长按开机键,如20秒,重启。...
formsy-react跨字段验证:实现复杂业务逻辑的终极方法
formsy-react跨字段验证:实现复杂业务逻辑的终极方法 【免费下载链接】formsy-react A form input builder and validator for React JS 项目地址: https://gitcode.com/gh_mirrors/fo/formsy-react 想要在React应用中构建复杂的表单验证逻辑吗?f…...
atopile生态系统探索:如何利用包管理器加速硬件开发
atopile生态系统探索:如何利用包管理器加速硬件开发 【免费下载链接】atopile Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️ …...
开发者利器:OpenClaw+千问3.5-27B自动生成API文档
开发者利器:OpenClaw千问3.5-27B自动生成API文档 1. 为什么需要自动化API文档生成 作为一个长期维护开源项目的开发者,我深刻体会到维护API文档的痛苦。每次代码更新后,手动同步文档不仅耗时,还容易遗漏细节。直到发现OpenClaw与…...
【国家级数字农业项目技术白皮书节选】:PHP轻量化时序数据处理框架如何扛住每秒8700+传感器上报?
第一章:农业 PHP 物联网数据可视化案例在智慧农业实践中,PHP 作为轻量级服务端语言,常被用于快速构建物联网数据聚合与可视化看板。本案例基于 ESP32 传感器节点采集土壤湿度、环境温湿度及光照强度,通过 HTTP POST 将 JSON 数据推…...
TMC7300单线UART电机驱动库技术解析与ESP32实践
1. TMC7300驱动库技术解析:面向嵌入式工程师的UART单线直流电机控制实践指南TMC7300是Trinamic(现属Analog Devices)推出的高集成度、低功耗直流电机驱动IC,专为电池供电、空间受限及对EMI敏感的应用场景设计。其核心创新在于采用…...
tmi8150b设置电机速度有两个地方,x轴电机,y轴电机,具体如下
tmi8150b设置电机速度有两个地方,x轴电机,y轴电机,具体如下x轴电机y轴电机...
Beyond All Reason代码架构分析:理解Spring引擎上的游戏开发模式
Beyond All Reason代码架构分析:理解Spring引擎上的游戏开发模式 【免费下载链接】Beyond-All-Reason Main game repository for Beyond All Reason. 项目地址: https://gitcode.com/gh_mirrors/be/Beyond-All-Reason Beyond All Reason(简称BAR&…...
OpenClaw多模型切换指南:Phi-3-vision-128k-instruct与纯文本模型协同工作
OpenClaw多模型切换指南:Phi-3-vision-128k-instruct与纯文本模型协同工作 1. 为什么需要多模型协同 去年我在尝试用AI自动化处理日常工作时,发现一个尴尬的现象:当我需要处理图文混合内容时,调用纯文本模型效果惨不忍睹&#x…...
嵌入式c语言——关键字4
typedef 给数据类型起个别名,使得对程序的可读性更高吗,同时和#define不一样typedeff是关键字,对已经存在的数据类型取别名。 在编译阶段处理,会进行类型检查,只能在定义的作用域内使用。 define是预处理指令ÿ…...
