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

补题报告08

 

题目背景

某天,奇异博士在纽约圣所研究维山帝之书时,发现了连接不同多元宇宙的传送门网络......

题目描述

经研究,奇异博士发现每个传送门都有固定的 “时间代价”—— 正数表示双向通行(往返时间代价相同均为正值),负数表示单向通行(从起点到终点的时间代价为负值)。

当存在一条从主宇宙出发,最终返回主宇宙的路径,且总时间代价减少时,就会引发时间悖论(旅行者可以通过循环该路径让时间无限倒流)。

请判断某次奇异博士规划的路线中是否存在这样的时间悖论路径。

注意:奇异博士当前所处的纽约圣所是编号为 1 的主宇宙,且各多元宇宙是互通的

输入格式

第一行包含整数T,表示测试用例数量。

每个测试用例的第一行包含两个整数 n 和 m,分别表示多元宇宙的数量(编号 1~n)和传送门的数量。

接下来 m 行,每行包含三个整数a, b, c, 表示一个传送门:

  • 若c ≥ 0:该传送门双向通行,从 a 到 b 和从 b 到 a 的时间代价均为 c
  • 若c < 0:该传送门单向通行,仅能从 a 到 b,时间代价为 c

输出格式

对于每个测试用例,若存在引发时间悖论的路径,输出 “YES”,否则输出 “NO”。

输入输出样例

输入

2
3 3
1 2 1
2 3 2
3 1 -4
3 3
1 2 1
2 3 2
3 1 4

输出 

YES
NO

说明/提示

对于全部的测试点,保证:

  • 1 ≤ T ≤ 10

  • 1 ≤ n ≤ 2×103,1 ≤ m ≤ 4×10^3

  • 1 ≤ a,b ≤n,−10^4 ≤ c ≤1 0^4

解题思路

判断是否存在从主宇宙(节点1)出发并返回的路径,且总时间代价为负(时间减少),这样的路径会导致时间悖论。这个问题等价于在图中检测是否存在从节点1可达的负权环。可以使用SPFA算法来检测负权环。使用邻接表存储图结,节点1距离为0,其他节点距离为无穷大,使用队列进行松弛操作,如果某个节点被松弛的次数超过节点总数n,说明存在负权环。检测到负权环 → 输出"YES"(存在时间悖论),未检测到负权环 → 输出"NO"(不存在时间悖论)。

解决代码

#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;struct Edge {int to;int cost;
};bool hasNegativeCycle(int n, vector<vector<Edge>>& graph) {vector<int> dist(n+1, INT_MAX);vector<int> count(n+1, 0);vector<bool> inQueue(n+1, false);queue<int> q;dist[1] = 0;q.push(1);inQueue[1] = true;while (!q.empty()) {int u = q.front();q.pop();inQueue[u] = false;for (const Edge& e : graph[u]) {int v = e.to;int cost = e.cost;if (dist[u] != INT_MAX && dist[u] + cost < dist[v]) {dist[v] = dist[u] + cost;if (!inQueue[v]) {q.push(v);inQueue[v] = true;count[v]++;if (count[v] > n) {return true;}}}}}return false;
}int main() {int T;cin >> T;while (T--) {int n, m;cin >> n >> m;vector<vector<Edge>> graph(n+1);for (int i = 0; i < m; i++) {int a, b, c;cin >> a >> b >> c;if (c >= 0) {graph[a].push_back({b, c});graph[b].push_back({a, c});} else {graph[a].push_back({b, c});}}if (hasNegativeCycle(n, graph)) {cout << "YES" << endl;} else {cout << "NO" << endl;}}return 0;
}

 

 

http://www.xdnf.cn/news/19257.html

相关文章:

  • 【人工智能99问】参数调整技术(31/99)
  • docker中的mysql有中文显示问题跟大小写区分问题?
  • erpc框架流程学习1
  • 玄机靶场 | 冰蝎3.0-jsp流量分析
  • RAG教程5:多表示索引和ColBERT
  • 高精度三维扫描仪三维扫描测量扇叶叶轮尺寸-中科米堆CASAIM
  • pcl封装6 connection_cloud 提取聚簇后的每个点云
  • 为什么外贸企业管理需要外贸CRM系统
  • 如何将OFD文件转换为PDF?总结在线OFD转PDF方法
  • ArcGIS Pro中 Nodata和nan 黑边的处理
  • Azure Marketplace 和 Microsoft AppSource的区别
  • 【论文简读】MuGS
  • 《开发避坑指南:从异常中读懂系统的“求救信号”》
  • 基于脚手架微服务的视频点播系统界面布局部分(一):首页及播放界面布局
  • Windows Command Line Windows 命令行
  • 鸿蒙Next导航与路由指南:组件导航与页面路由的完美协作
  • 导入自定义模块的过程中出现ModuleNotFoundError错误
  • 新手法务合同审查,有什么建议?
  • 构建稳定和可扩展云基础设施的首选服务:AWS的EC2实例
  • 前端工程化深度实践:从构建优化到CI/CD的完整解决方案
  • vue3跨层级传递数据,比如:祖->孙
  • JS循环方法
  • kimi浏览器助手-月之暗面推出的智能浏览器扩展
  • 晨控CK-FR102ANS与欧姆龙NX系列PLC配置EtherNet/IP通讯连接手册
  • 过滤器和拦截器的区别?
  • 数据结构(C语言篇):(六)单链表算法题(下)
  • LinuxC语言系统开发——网络编程
  • 英文版在线客服系统支持海外客户的实时聊天解决方案
  • 透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • PS的基础操作与图片常用知识