UVa12227/LA4618 Wormholes

UVa12227/LA4618 Wormholes

  • 题目链接
  • 题意
  • 分析
  • 测试数据
  • AC 代码

题目链接

  本题是2009年icpc欧洲区域赛西北欧赛区的j题

  UVA - 12227 Wormholes

题意

  你有一艘星际飞船,飞船运行速度为1,打算从坐标a旅行到坐标b(出发时刻为0),已知n个虫洞(0≤n≤ 50)的信息:入口点坐标s,出口点坐标e,形成时间t,穿过虫洞后时间的迁移量d(−1000000≤t,d≤1000000)。所有坐标的x、y、z绝对值不超过10000,并且任意两点间的距离简化成欧式距离向上取整。求达到b点的最早时间。

分析

  由于穿过虫洞后时间的迁移量d可能为负数,一旦经过某虫洞存在负圈,那么即便首次到达虫洞入口的时间晚于其形成时间t,只要绕着此圈不停地来回,到达虫洞两端点的最早时间将回退到t和t+d。

  因此只要预处理虫洞,看每个虫洞是否能找出负圈,如果能找到负圈那么达到虫洞两端的最早时间为 t s = m i n ( S a s , t ) t_s=min(S_{as},t) ts=min(Sas,t) m i n ( t s + S s e , t + d ) min(t_s+S_{se},t+d) min(ts+Sse,t+d)。预处理之后,跑一边Bellman Ford就能得到答案。对每个虫洞预处理看能否找出负圈的过程类似Bellman Ford,不过实际上更高效,参见代码。

测试数据

  给一份测试数据

AC 代码

#include <iostream>
#include <queue>
using namespace std;#define N 110
int s[N][N], f[N], g[N], t[N], d[N], x[N], y[N], z[N], m, n; bool inq[N], cyc[N];int ceil_sqrt(int x) {int l = 0, r = min((x+1)>>1, 34642);while (l <= r) {int m = (l+r+1)>>1, y = m*m;if (y == x) return m;y < x ? l = m+1 : r = m-1;}return l;
}bool update(int i) {queue<int> q;for (int j=2; j<n; j+=2) {g[j] = (cyc[j] ? t[j] : max(t[i]+d[i]+s[i+1][j], t[j])) + d[j];if (g[j] + s[j+1][i] < t[i]) {f[i] = min(f[i], t[i]); f[i+1] = min(f[i+1], min(f[i]+s[i][i+1], t[i]+d[i]));return cyc[i] = true;}q.push(j); inq[j] = true;}while (!q.empty()) {int u = q.front(); q.pop(); inq[u] = false;for (int j=2; j<n; j+=2) if (!cyc[j]) {int v = max(g[u]+s[u+1][j], t[j]) + d[j];if (v < g[j]) {if (v + s[j+1][i] < t[i]) {f[i] = min(f[i], t[i]); f[i+1] = min(f[i+1], min(f[i]+s[i][i+1], t[i]+d[i]));return cyc[i] = true;}g[j] = v;if (!inq[j]) q.push(j), inq[j] = true;}}}return false;
}void solve() {cin >> x[0] >> y[0] >> z[0] >> x[1] >> y[1] >> z[1] >> m; n = 2;for (int i=0; i<m; ++i) cin >> x[n] >> y[n] >> z[n++] >> x[n] >> y[n] >> z[n++] >> t[n-2] >> d[n-2];for (int i=0; i<n; ++i) for (int j=i; j<n; ++j) s[i][j] = s[j][i] = ceil_sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])+(z[i]-z[j])*(z[i]-z[j]));for (int i=0; i<n; ++i) f[i] = s[i][0], cyc[i] = false;for (int i=2; i<n; i+=2) if (s[i][i+1] + d[i] < 0)f[i] = min(f[i], t[i]), f[i+1] = min(f[i+1], min(f[i]+s[i][i+1], t[i]+d[i])), cyc[i] = true;while (true) {bool updated = false;for (int i=0; i<n; i+=2) if (!cyc[i] && update(i)) updated = true;if (!updated) break;}queue<int> q;for (int i=2; i<n; ++i) q.push(i), inq[i] = true;while (!q.empty()) {int u = q.front(); q.pop(); inq[u] = false;for (int i=0, v; i<n; ++i) if ((v = s[i][u] + f[u]) < f[i]) {f[i] = v;if (!inq[i]) q.push(i), inq[i] = true;}if (u&1) continue;int w = u+1, v = max(f[u], t[u]) + d[u];if (v < f[w]) {f[w] = v;if (!inq[w]) q.push(w), inq[w] = true;}}for (int i=2; i<n; ++i) f[1] = min(f[1], f[i] + s[1][i]);cout << f[1] << endl;
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t; cin >> t;while (t--) solve();return 0;
}

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

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

相关文章

线程池的艺术:深度解析Java多线程并发性能的优化之道

1. 引言 在高并发的Java应用开发中,线程池作为管理和复用线程资源的核心机制,扮演着举足轻重的角色。合理、高效地使用线程池不仅能减少资源消耗、提高系统响应速度,还能有效控制并发线程数量,保证系统的稳定性和性能。 2. 线程池的基本概念与优势 线程池是一种管理和复用…

发论文idea来了!强化学习+Transformer,29个创新点汇总

基于Transformer的强化学习&#xff08;TRL&#xff09;是一种利用Transformer模型架构来改进和增强强化学习算法性能的方法。 这种方法通过结合Transformer模型强大的表示能力和强化学习的决策优化框架&#xff0c;显著提升了智能体的学习能力和适应能力&#xff0c;为我们解…

dockerfile文件的中的命令

# 基础镜像 FROM registry.cn-beijing.aliyuncs.com/205erp/myopenjdk:8.6 # 设置工作目录 WORKDIR /opt # 拷贝jar包到工作目录 COPY target/*.jar app.jar RUN ls # 设置暴漏的端口 EXPOSE 8080 # 启动jar包 CMD java ${JAVA_TOOL_OPTIONS} -jar app.jar

N7745A Keysight 是德 多端口光功率计 简述

N7745A光功率计专为表征多端口光器件而设计&#xff0c;适用于多路复用器、PON分路器、波长选择开关&#xff08;WSS&#xff09;和ROADM等多端口器件的测试。它可以节省通道空间&#xff0c;通过LAN或USB连接进行并行编程&#xff0c;集成多种设备到单一设置&#xff0c;提高了…

Android C++系列:函数知识知多少

1. 背景 函数可以理解为功能的封装&#xff0c;很基础的功能单元&#xff0c;但是因为它虽然看似简单&#xff0c;但是里面涉及了不少知识点和技巧&#xff0c;我们花一篇文章来整理。 2. 函数定义 函数有以下几部分定义&#xff1a; 返回类型函数名称形参列表函数体 函数…

企业设备管理现状与解决方案

在当今企业运营中&#xff0c;设备管理作为保障生产稳定、提升效率的重要环节&#xff0c;其复杂性和挑战性日益凸显。无论是生产车间、石油化工、物业小区&#xff0c;还是消防器材、建筑施工等领域&#xff0c;都面临着设备故障频发、维修流程繁琐等共性问题。 为了帮助企业…

Shell编程练习:掌握命令行的魔法

1、编写一个 shell 脚本&#xff0c;它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。 #!/bin/bash# 检查是否提供了至少两个参数 if [ "$#" -lt 2 ]; thenecho "使用方法: $0 目标目录 文件..."exit 1 fi# 第一个位置…

6.19作业

TCP服务器 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h>#define PORT 8888 #define IP "192.168.124.39&q…

VUE3实现个人网站模板源码

文章目录 1.设计来源1.1 网站首页页面1.2 个人工具页面1.3 个人日志页面1.4 个人相册页面1.5 给我留言页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1…

对比4090及4090D:国区“特供”与原版相比有何区别?

2023年12月28日 英伟达宣布正式发布GeForce RTX 4090D&#xff0c;对比于一年前上市的4090芯片&#xff0c;两者的区别与差异在哪&#xff1f;而在当前比较火热的大模型推理、AI绘画场景方面 两者各自的表现又如何呢&#xff1f; 规格与参数信息对比现在先来看看GeForce RT…

SCI绘图【1】-不同颜色表示密度和差异--密度图

参考资料&#xff1a;密度图&#xff08;Density Plot&#xff09; - 数据可视化图表 - 数字孪生百科 密度图是快速观察变量数值分布的有效方法之一。通常情况下&#xff0c;会根据两个变量将平面绘图区域分为非常多的子区域&#xff0c;之后以不同颜色表示落在该区域上样本的…

揭秘!家用空气净化器针对“毛絮、灰尘”的制胜秘诀是什么?

亲爱的朋友们&#xff01;作为一个家庭主妇&#xff0c;我想和大家聊聊我日常生活中那些让人头疼的飞尘和毛絮问题。 每天忙得团团转&#xff0c;累得腰酸背痛&#xff0c;但家里仍然飘着那些烦人的飞尘和毛絮。它们就像一群顽皮的小精灵&#xff0c;四处飞舞&#xff0c;怎么…

《2024攻防演练必修高危漏洞集合》

1 漏洞汇总数据 以下数据针对自2024年3月以来截止到目前在攻防演练过程红队利用率比较高的漏洞进行总结汇总&#xff0c;具体的数据如下所示&#xff1a; ●远程代码执行漏洞 漏洞数量&#xff1a;6个 涉及厂商&#xff1a;YzmCMS、畅捷通、pgAdmin、泛微、锐捷、奇安信、 ●…

如何通过自己编写Jmeter函数

在Jmeter的函数助手里&#xff0c;有很多内置的函数&#xff0c;比如Random、UUID、time等等。使用这些函数可以快速帮我们生成某些数据&#xff0c;进行一些逻辑处理。用起来非常的方便。 但是在实际接口测试过程中&#xff0c;有很多的需求&#xff0c;Jmeter内置的函数可能…

苹果不会等到明年才对 Siri 进行改进|TodayAI

据彭博社报道&#xff0c;今年苹果&#xff08;APPLE&#xff09;将推出一个更令人满意的 Siri。 当 iOS 18 今年秋季推出时&#xff0c;Siri 的功能不仅仅是让你的 iPhone 边缘显示彩虹光环。虽然苹果智能功能要到 2025 年才会向非测试版用户推出&#xff0c;但据报道&#x…

每天写java到期末考试(6.19)--1.百元买百鸡

好久没有写了&#xff0c;现在赶快先复习复习&#xff0c;哈哈&#xff0c;加油&#xff01; 收获&#xff1a;写了好久&#xff0c;才写好这一个问题&#xff0c;提示自己不要好高骛远&#xff0c;前期先踏踏实实写好每一个代码&#xff1b; 被困住原因 取余%与整除/区别 pa…

数据库引擎有哪些?

数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务&#xff0c;从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查…

Linux 图形化编程GTK3.0 快速入门之布局

GTK3.0 布局之水平布局 核心语法&#xff1a; 水平布局容器&#xff1a; 水平布局容器的创建&#xff1a; GtkWidget *gtk_hbox_new( gboolean homogeneous, gint spacing ); homogeneous&#xff1a;容器内控件是否大小一致( gboolean 取值为TRUE 或 FALSE ) spacing&#…

Qemu 模拟 Mini2440 扩展SDRAM 64M 到 128M,256M(三)

1. Mini2440 最大支持的SDRAM 是128M+128M MINI2440 板子的内存是由两片64M大小的SDRAM组成,所以实际内存有128M。分别连接到芯片的BANK6和BANK7。从这个图可以看出 Mini2440 最大支持的SDRAM 是128M+128M,我们能不能利用 QEMU 直接给你模拟干满到 256M呢?各位看官看我的操作…

Postman 请求参数传递指南:Query、Path和Body

Postman 作为一个功能强大的工具&#xff0c;极大地简化了 API 测试和调试的过程&#xff0c;提供了发送请求和检查响应的直接方法。本文将着重介绍如何在 Postman 中高效地处理请求参数&#xff0c;以提高 API 测试和开发的便利性。 1、解析请求参数 首先&#xff0c;我们需要…