904. 虫洞(spfa判断负环模板题)

904. 虫洞 - AcWing题库

农夫约翰在巡视他的众多农场时,发现了很多令人惊叹的虫洞。

虫洞非常奇特,它可以看作是一条 单向 路径,通过它可以使你回到过去的某个时刻(相对于你进入虫洞之前)。

农夫约翰的每个农场中包含 N 片田地,M 条路径(双向)以及 W 个虫洞。

现在农夫约翰希望能够从农场中的某片田地出发,经过一些路径和虫洞回到过去,并在他的出发时刻之前赶到他的出发地。

他希望能够看到出发之前的自己。

请你判断一下约翰能否做到这一点。

下面我们将给你提供约翰拥有的农场数量 F,以及每个农场的完整信息。

已知走过任何一条路径所花费的时间都不超过 10000 秒,任何虫洞将他带回的时间都不会超过 10000 秒。

输入格式

第一行包含整数 F,表示约翰共有 F 个农场。

对于每个农场,第一行包含三个整数 N,M,W。

接下来 M 行,每行包含三个整数 S,E,T,表示田地 S 和 E 之间存在一条路径,经过这条路径所花的时间为 T。

再接下来 W 行,每行包含三个整数 S,E,T,表示存在一条从田地 S 走到田地 E 的虫洞,走过这条虫洞,可以回到 T 秒之前。

输出格式

输出共 F 行,每行输出一个结果。

如果约翰能够在出发时刻之前回到出发地,则输出 YES,否则输出 NO

数据范围

1≤F≤5
1≤N≤500
1≤M≤2500
1≤W≤200
1≤T≤10000
1≤S,E≤N

输入样例:
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

解析: 

通过 SPFA(Shortest Path Faster Algorithm)算法检测图中是否存在负权环。

算法思想如下:

1. 使用 SPFA 算法求解单源最短路径问题,计算从每个点出发到其他所有点的最短路径。

2. 在遍历边的过程中,如果某个点被松弛了 `n` 次(`n` 为节点数),说明存在负权环。

3. 如果存在负权环,则输出 "YES",否则输出 "NO"。

具体实现中,将图中的正权边按照正常的方式添加,而将负权边的权值取相反数,这样就可以转化为求解负权环的问题。如果存在负权环,说明图中存在一条路径,经过这个路径的权值和为负,即存在一组边,形成了一个负权环。

 

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
using namespace std;
typedef long long LL;
const int N = 505, M = 5205;
int n, m1, m2;
int h[N], e[M], w[M], ne[M], idx;
int q[N], vis[N], cnt[N],d[N];void add(int a, int b, int c) {e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}int spfa() {memset(d, 0x3f, sizeof d);memset(cnt, 0, sizeof cnt);memset(vis, 0, sizeof vis);int hh = 0, tt = 0;for (int i = 1; i <= n; i++) {q[tt++] = i;vis[i] = 1;}while (hh != tt) {int t = q[hh++];if (hh == N)hh = 0;vis[t] = 0;for (int i = h[t]; i != -1; i = ne[i]) {int j = e[i];if (d[j] > d[t] + w[i]) {d[j] = d[t] + w[i];cnt[j] = cnt[t] + 1;if (cnt[j] > n)return 1;if (!vis[j]) {q[tt++] = j;if (tt == N)tt = 0;vis[j] = 1;}}}}return 0;
}int main() {int T;cin >> T;while (T--) {memset(h, -1, sizeof h);idx = 0;scanf("%d%d%d", &n, &m1, &m2);int a, b, c;while (m1--) {scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c);}while (m2--) {scanf("%d%d%d", &a, &b, &c);add(a, b, -c);}if (spfa())cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}

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

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

相关文章

进程线程知识

一 初识linux线程 1 线程由来 我们之前说创建一个进程&#xff0c;要创建进程控制块pcb&#xff0c;进程地址空间&#xff0c;页表&#xff0c;而且我之前的博客中都有意无意的说明这个pcb是描述进程的&#xff0c;是os用来管理进程的&#xff0c;而有了线程后&#xff0c;就要…

Python基础第八篇(Python异常处理,模块与包)

文章目录 一、了解异常二、捕获异常&#xff08;1&#xff09;.异常案例代码&#xff08;2&#xff09;.读出结果 三、异常的传递&#xff08;1&#xff09;.异常传递案例代码&#xff08;2&#xff09;.读出结果 四、Python模块&#xff08;1&#xff09;.模块的导入&#xff…

大模型+自动驾驶

论文&#xff1a;https://arxiv.org/pdf/2401.08045.pdf 大型基础模型的兴起&#xff0c;它们基于广泛的数据集进行训练&#xff0c;正在彻底改变人工智能领域的面貌。例如SAM、DALL-E2和GPT-4这样的模型通过提取复杂的模式&#xff0c;并在不同任务中有效地执行&#xff0c;从…

k8s使用ingress实现应用的灰度发布升级

v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx&#xff0c;来测试灰度发布实现过程 一、方案&#xff1a;使用ingress实现应用的灰度发布 1、服务端&#xff1a;正常版本v1&#xff0c;灰度升级版本v2 2、客户端&#xff1a;带有请求头versionv2标识的请求访问版…

【MySQL】一文总结MVCC多版本并发控制

目录 MVCC 介绍当前读和快照读当前读快照读 MVCC 原理解析隐式字段Undo Log版本链Read ViewRead View 可见性原则 RC 和 RR 下的 Read ViewRC 下的 Read ViewRR 下的 Read View小结RR 级别下能否防止幻读总结 MVCC 介绍 在当今高度并发的数据库环境中&#xff0c;有效的并发控…

Element中的el-table中如何获取每一行的id

只需要用<template slot-scope"scope"></template >标签包裹起来即可 使用scope.row.列名&#xff0c;的方式获取当前行对应列的值 可以通过使用作用域插槽的方式获取每一行的id。以下是一个示例代码&#xff1a; <el-table-column prop"statu…

超级管理员权限绕过windows登录windows命令

文章目录 一、设置超级管理员权限二、绕过windows登录界面三、windows命令 一、设置超级管理员权限 查看本机的用户列表&#xff1a;net user激活超级用户&#xff1a;net user administrator /active:yes为超级用户设置密码&#xff1a;net user administrator 123(password)…

Redis 高可用之主从复制

1、简介 在 Redis 中&#xff0c;主从复制就是多个节点进行数据同步&#xff0c;在这些节点中&#xff0c;有 Master 和 slave 两个角色&#xff0c;Master 以写为主&#xff0c;slave 以读为主&#xff0c;当 Master 数据变化的时候&#xff0c;会自动将新的数据同步到其他的 …

C语言联合体(Union)在实战中的使用技巧

联合体&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;允许在同一内存位置存储不同的数据类型。联合体在实战中可以用于一些特定的场景&#xff0c;具有一些使用技巧&#xff0c;以下是一些常见的实战中使用技巧&#xff1a; 1.节省内存空间&#xff1a; 联合…

如何优雅的使用 if else

作为一个程序员在开发中 if else 判断在代码中是必不可少的&#xff0c;但是 if else 判断使用多了嵌套多了不利于代码维护&#xff0c;看起来也头疼难以理解&#xff0c;接下来以为大家介绍一下我是怎么避免过多冗余的 if else 嵌套的。 0. 嵌套的if语句的典型用例 在最终执…

StableDiffusion新版汉化

新旧版不同&#xff0c;这里以新版为例&#xff0c;用的是带链接&#xff0c;可以更新的方法。 步骤&#xff1a; 1.找到这个位置&#xff0c;依次点击&#xff0c;注意选项。 2.点击加载&#xff0c;等待刷新。 ctrlF搜索 zh_CN Localization 右边点击install&#xff0c…

外包干了4个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Thin-LUN使用vdbench测试性能如何预埋数据

一、功能需求 Thin-LUN性能测试过程中&#xff0c;由于刚创建的THIN-LUN需要预埋数据&#xff0c;才能准确测试出实际性能&#xff0c;所以在第一次性能测试之前&#xff0c;需要使用vdbench预埋数据 二、组网图 无 三、配置步骤 seekpcteof 测试性能时&#xff0c;如果读…

GAMES101-Assignment8

一、总览 1.1 连接绳子的约束 在rope.cpp 中, 实现Rope 类的构造函数。这个构造函数应该可以创建一个 新的绳子(Rope) 对象&#xff0c;该对象从start 开始&#xff0c;end 结束&#xff0c;包含num_nodes 个节点。也就是如下图所示&#xff1a; 每个结点都有质量&#xff…

洛谷P3392 涂国旗-----暴力美学的演绎

# 涂国旗 ## 题目描述 某国法律规定&#xff0c;只要一个由 $N \times M$ 个小方块组成的旗帜符合如下规则&#xff0c;就是合法的国旗。&#xff08;毛熊&#xff1a;阿嚏——&#xff09; - 从最上方若干行&#xff08;至少一行&#xff09;的格子全部是白色的&#xff1b…

【论文阅读】Automated Runtime-Aware Scheduling for Multi-Tenant DNN Inference on GPU

该论文发布在 ICCAD’21 会议。该会议是EDA领域的顶级会议。 基本信息 AuthorHardwareProblemPerspectiveAlgorithm/StrategyImprovment/AchievementFuxun YuGPUResource under-utilization ContentionSW SchedulingOperator-level schedulingML-based scheduling auto-searc…

CGAL 网格连通聚类

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里的思路其实与点云的欧式聚类非常类似,区别在于点云的欧式聚类是通过搜索半径对点云进行聚类,至于基于连通性网格面片聚类则是通过面片的邻近关系对面片进行聚类,大致的过程与欧式聚类是相同的: 首先,需要指…

Rustdesk 中VP8 / VP9 / AV1 是什么?

环境&#xff1a; Rustdesk1.1.9 VP8 / VP9 / AV1 问题描述&#xff1a; VP8 / VP9 / AV1 是什么&#xff1f; 解决方案&#xff1a; 1.VP8、VP9和AV1是视频编解码器&#xff0c;用于压缩和解压缩视频数据。它们是由Google和Alliance for Open Media&#xff08;AOM&#…

011 变量

变量的定义 注意事项 作用域 类变量&#xff1a;定义在类中的变量&#xff0c;类的整个生命周期内可用实例变量&#xff1a;定义在类中的变量&#xff0c;类的实例可以使用局部变量&#xff1a;定义在方法中的变量&#xff0c;仅在方法内可以使用 class Dog{// 类变量static …

Oracle 19c RAC集群管理 ---------关键参数以及常用命令

Oracle 19c RAC集群管理 ---------关键参数 Oracle 19C RAC 参数最佳实践 --开启强制归档 ALTER DATABASE FORCE LOGGING; --设置 30分钟 强制归档 ALTER SYSTEM SET ARCHIVE_LAG_TARGET1800 SCOPEBOTH SID*; --设置期望undo保持时间3h ALTER SYSTEM SET UNDO_RETENTION21600…