【一本通】虫洞
【一本通】虫洞
- C语言代码
- C++代码
- JAVA代码
| 💐The Begin💐点点关注,收藏不迷路💐 |
John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1…N标号)块地,并有W个虫洞(有向边)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。
输入
第1行: 一个整数 F, 表示农场个数。
每个农场的第1行:三个整数 N, M, W。
每个农场的第2…M + 1行:三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条用时T秒的小路。
每个农场的M + 2…M + W + 1行: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条可以使John到达T秒前的虫洞。
输出
第1至F行: 如果John能在这个农场实现他的目标,输出"YES",否则输出"NO"。
样例输入
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
样例输出
NO
YES
C语言代码
#include <stdio.h>
#include <stdlib.h>
#define INF 0x3f3f3f3f
#define MAXN 500 + 5
// 边结构体,存储边的起点、终点和权重(时间花费,虫洞时为负权重)
typedef struct Edge {
int from;
int to;
int weight;
} Edge;
// Bellman-Ford算法判断是否存在负权环(存在负权环则能回到过去)
int bellmanFord(int n, Edge edges[], int edgeCount) {
int dist[MAXN];
for (int i = 1; i <= n; ++i) {
dist[i] = INF;
}
dist[1] = 0;
for (int i = 1; i <= n; ++i) {
int updated = 0;
for (int j = 0; j < edgeCount; ++j) {
if (dist[edges[j].to] > dist[edges[j].from] + edges[j].weight) {
dist[edges[j].to] = dist[edges[j].from] + edges[j].weight;
updated = 1;
}
}
if (!updated) {
return 0;
}
}
return 1;
}
int main() {
int F;
scanf(“%d”, &F);
while (F–) {
int N, M, W;
scanf(“%d %d %d”, &N, &M, &W);
Edge* edges = (Edge*)malloc((2 M + W) sizeof(Edge));
int edgeIndex = 0;
// 读入无向边(小路)信息,转换为两条有向边存入edges
for (int i = 0; i < M; ++i) {
int S, E, T;
scanf(“%d %d %d”, &S, &E, &T);
edges[edgeIndex++] = (Edge){S, E, T};
edges[edgeIndex++] = (Edge){E, S, T};
}
// 读入有向边(虫洞)信息,存入edges
for (int i = 0; i < W; ++i) {
int S, E, T;
scanf(“%d %d %d”, &S, &E, &T);
edges[edgeIndex++] = (Edge){S, E, -T};
}
int canGoBack = bellmanFord(N, edges, edgeIndex);
printf(“%s\n”, canGoBack? “YES” : “NO”);
free(edges);
}
return 0;
}
C++代码
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f; // 定义一个很大的值,用于初始化距离等情况
const int MAXN = 500 + 5; // 节点数量上限,题目给定范围加一些余量
// 边结构体,用于存储边的起点、终点和权重(时间花费,虫洞时为负权重)
struct Edge {
int from;
int to;
int weight;
};
// 使用Bellman-Ford算法判断是否存在负权环(存在负权环则能回到过去)
bool bellmanFord(int n, vector& edges) {
vector dist(n + 1, INF); // 存储从源点到各节点的距离,初始化为很大值
dist[1] = 0; // 可以任意设置一个起始点距离为0,因为要检测整个图是否有负环
for (int i = 1; i <= n; ++i) { // 进行n次迭代(理论上n - 1次就够,但多一次可检测负权环)
bool updated = false; // 标记本轮是否有距离更新
for (Edge edge : edges) { // 遍历所有边
if (dist[edge.to] > dist[edge.from] + edge.weight) { // 尝试松弛操作
dist[edge.to] = dist[edge.from] + edge.weight;
updated = true;
}
}
if (!updated) { // 如果本轮没有距离更新,说明已经收敛,不存在负权环,提前退出
return false;
}
}
return true; // 如果完成n次迭代后仍能更新距离,说明存在负权环,即能回到过去
}
int main() {
int F;
cin >> F; // 读入农场个数
while (F–) { // 对每个农场进行处理
int N, M, W;
cin >> N >> M >> W; // 读入该农场的节点数、无向边(小路)数量、有向边(虫洞)数量
vector edges; // 存储该农场的所有边信息
// 读入无向边(小路)信息,将其转换为两条有向边存入edges
for (int i = 0; i < M; ++i) {
int S, E, T;
cin >> S >> E >> T;
edges.push_back({S, E, T});
edges.push_back({E, S, T});
}
// 读入有向边(虫洞)信息,存入edges
for (int i = 0; i < W; ++i) {
int S, E, T;
cin >> S >> E >> T;
edges.push_back({S, E, -T}); // 虫洞权重为负,表示回到过去,时间减少
}
bool canGoBack = bellmanFord(N, edges); // 判断该农场是否能回到过去
cout << (canGoBack? “YES” : “NO”) << endl; // 根据结果输出相应字符串
}
return 0;
}
JAVA代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Edge {
int from; // 边的起点
int to; // 边的终点
int weight; // 边的权重(时间花费,虫洞时为负权重)
public Edge(int from, int to, int weight) {
this.from = from;
this.to = to;
this.weight = weight;
}
}
public class Main {
private static final int INF = 0x3f3f3f3f; // 定义一个很大的值,用于初始化距离等情况
private static final int MAXN = 500 + 5; // 节点数量上限,题目给定范围加一些余量
// 使用Bellman-Ford算法判断是否存在负权环(存在负权环则能回到过去)
private static boolean bellmanFord(int n, List edges) {
int[] dist = new int[n + 1];
for (int i = 1; i <= n; i++) {
dist[i] = INF;
}
dist[1] = 0;
for (int i = 1; i <= n; i++) { // 进行n次迭代(理论上n - 1次就够,但多一次可检测负权环)
boolean updated = false; // 标记本轮是否有距离更新
for (Edge edge : edges) { // 遍历所有边
if (dist[edge.to] > dist[edge.from] + edge.weight) { // 尝试松弛操作
dist[edge.to] = dist[edge.from] + edge.weight;
updated = true;
}
}
if (!updated) { // 如果本轮没有距离更新,说明已经收敛,不存在负权环,提前退出
return false;
}
}
return true; // 如果完成n次迭代后仍能更新距离,说明存在负权环,即能回到过去
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int F = scanner.nextInt(); // 读入农场个数
for (int f = 0; f < F; f++) { // 对每个农场进行处理
int N = scanner.nextInt(); // 读入该农场的节点数
int M = scanner.nextInt(); // 读入该农场的无向边(小路)数量
int W = scanner.nextInt(); // 读入该农场的有向边(虫洞)数量
List edges = new ArrayList<>();
// 读入无向边(小路)信息,将其转换为两条有向边存入edges
for (int i = 0; i < M; i++) {
int S = scanner.nextInt();
int E = scanner.nextInt();
int T = scanner.nextInt();
edges.add(new Edge(S, E, T));
edges.add(new Edge(E, S, T));
}
// 读入有向边(虫洞)信息,存入edges
for (int i = 0; i < W; i++) {
int S = scanner.nextInt();
int E = scanner.nextInt();
int T = scanner.nextInt();
edges.add(new Edge(S, E, -T)); // 虫洞权重为负,表示回到过去,时间减少
}
boolean canGoBack = bellmanFord(N, edges); // 判断该农场是否能回到过去
System.out.println(canGoBack? “YES” : “NO”); // 根据结果输出相应字符串
}
scanner.close();
}
}

| 💐The End💐点点关注,收藏不迷路💐 |
相关文章:
【一本通】虫洞
【一本通】虫洞 C语言代码C代码JAVA代码 💐The Begin💐点点关注,收藏不迷路💐 John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之…...
python爬虫--小白篇【爬虫实践】
一、前言 1.1、王者荣耀皮肤爬虫 根据王者荣耀链接,将王者荣耀的全部英雄的全部皮肤图片爬取保存到本地。经过分析得到任务的三个步骤: 根据首页全部英雄列表连接获取全部英雄的名称hero_name以及对应的hero_id;根据单个英雄的hero_name和h…...
Unity背包道具拖拽(极简版实现)
(感觉Csdn代码页面可以再大一点或者加个放大功能 不然得划着看不太舒服) 1.关键接口,三个拖拽相关的 2.关键参数,PointerEventData 一直没仔细看过,其实有包含鼠标相关的很多参数,鼠标点击次数ÿ…...
spark读取普通文件
spark读取普通文件 txt文件 """ 将一行数据当做一个字段,需要自己切割 字段名称为value 表结构 可以从sql中搞 """ df spark.read.text("../../data/wordcount/input/data.txt") df spark.read.format("text"…...
MySQL SQL语句性能优化
MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...
【蓝桥杯每日一题】技能升级
技能升级 2024-12-10 蓝桥杯每日一题 技能升级 二分 题目大意 一个角色有 N 种可以增加攻击力的技能,对于第 i 个技能首次升级可以提升 A i A_i Ai 点攻击力,随后的每次升级增加的攻击力都会减少 B i B_i Bi 。升级 ⌈ A i B i ⌉ \lceil \frac{A…...
css 实现在一条线上流动小物体(offset-path)
直接贴代码,留几个参考网址给大家 【SVG】路径<Path>标签详解,一次搞懂所有命令参数 探秘神奇的运动路径动画 Motion Path <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport&quo…...
探索 Robyn 框架 —— 下一代高性能 Web 框架
技术博客:探索 Robyn 框架 —— 下一代高性能 Web 框架 什么是 Robyn? Robyn 是一个用 Rust 编写的高性能 Web 框架,旨在通过极简设计和高效并发处理,帮助开发者快速构建可扩展的现代 Web 应用。得益于 Rust 的内存安全性和性能…...
STL容器-map P3613【深基15.例2】寄包柜 普及-
题目来源:洛谷题库 文章目录 map例题map知识点map使用注意:map的常用用法 map例题 P3613【深基15.例2】寄包柜 普及- 题意 根据数据插入/查询 思路 map键值对可以根据柜子编号查找物品,但是柜子又有很多个,考虑数组或者map数组…...
【MySQL 进阶之路】了解 性能优化 与 设计原则
1.B树的优势 “矮胖”结构: 矮:B树的每个节点存储更多的关键字,从而减少了树的层级(最多三层),减少了磁盘I/O操作,提高了查询效率。胖:叶子节点存储实际的数据,并使用双…...
MySQL之数据库三大范式
一、什么是范式? 范式是数据库遵循设计时遵循的一种规范,不同的规范要求遵循不同的范式。 (范式是具有最小冗余的表结构) 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式(1NF/2NF/3NF…...
[大数据]Hudi
G:\Bigdata\17.hudi\大数据技术之数据湖Hudi 第1章 Hudi概述 1.1 Hudi简介 Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服…...
jenkins harbor安装
Harbor是一个企业级Docker镜像仓库。 文章目录 1. 什么是Docker私有仓库2. Docker有哪些私有仓库3. Harbor简介4. Harbor安装 1. 什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Dock…...
JavaScript 高级特性与 ES6 新特性:正则表达式的深度探索
在现代 JavaScript 开发中,正则表达式(Regular Expressions)和高级特性、ES6 新特性的结合使用,能够极大地提升代码的简洁性、可读性和功能性。本文将深入探讨 JavaScript 中的正则表达式及其在高级特性和 ES6 新特性中的应用&…...
正则表达式——参考视频B站《奇乐编程学院》
智能指针 一、背景🎈1.1. 模式匹配🎈1.2. 文本替换🎈1.3. 数据验证🎈1.4. 信息提取🎈1.5. 拆分字符串🎈1.6. 高级搜索功能 二、原料2.1 参考视频2.2 验证网址 三、用法3.1 限定符3.1.1 ?3.1.2 *3.1.3 3.1.…...
【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...
【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节
目前的一些多模态大模型的工作倾向于使用MLLM进行推理任务,然而,纯OCR任务偏向于模型的感知能力,对于文档场景,由于文字密度较高,现有方法往往通过增加图像token的数量来提升性能。这种策略在增加新的语言时࿰…...
Mybatis动态sql执行过程
动态SQL的执行原理主要涉及到在运行时根据条件动态地生成SQL语句,然后将其发送给数据库执行。以下是动态SQL执行原理的详细解释: 一、接收参数 动态SQL首先会根据用户的输入或系统的条件接收参数。这些参数可以是查询条件、更新数据等,它们…...
leetcode 31 Next Permutation
题意 找到下一个permutation是什么,对于一个数组[1,2,3],下一个排列就是[1, 3, 2] 链接 https://leetcode.com/problems/next-permutation/ 思考 首先任何一个permutation满足一个性质,从某个位置往后一定是降序。…...
每日一练 | 华为 eSight 创建的缺省角色
01 真题题目 下列选项中,不属于华为 eSight 创建的缺省角色的是: A. Administrator B. Monitor C. Operator D. End-User 02 真题答案 D 03 答案解析 华为 eSight 是一款综合性的网络管理平台,提供了多种管理和监控功能。 为了确保不同用…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
