找负环(图论基础)
文章目录
- 负环
- spfa找负环
- 方法一
- 方法二
- 实际效果
负环

环内路径上的权值和为负。
spfa找负环
两种基本的方法
- 统计每一个点的入队次数,如果一个点入队了n次,则说明存在负环
- 统计当前每个点中的最短路中所包含的边数,如果当前某个点的最短路所包含的边数大于等于n,也说明存在负环
实际上两种方法是等价的,都是判断是否路径包含n条边, n n n条边的话就有 n + 1 n+1 n+1个点
用的更多的还是第二种方法。
方法一
c n t [ x ] : 表示 x 的入队次数 cnt[x]:表示x的入队次数 cnt[x]:表示x的入队次数
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define inf 0x3f3f3f3f*1llusing namespace std;void solve()
{int n,m1,m2;cin>>n>>m1>>m2;vector<vector<pii>>g(n+1);rep(i,1,m1){int u,v,w;cin>>u>>v>>w;g[u].pb({v,w});g[v].pb({u,w});} rep(i,1,m2){int u,v,w;cin>>u>>v>>w;g[u].pb({v,-w});}vector<int>inq(n+1,0);vector<int>cnt(n+1,0);vector<int>d(n+1,0);queue<int>q;rep(i,1,n){q.push(i);inq[i]=1;}while(q.size()){auto t=q.front();q.pop();int u=t;inq[u]=0;for(auto it:g[u]){int v=it.x,w=it.y;if(d[v]>d[u]+w){d[v]=d[u]+w;if(!inq[v]){q.push(v);inq[v]=1;cnt[v]++;if(cnt[v]>=n){cout<<"YES"<<endl;return;}}}}}cout<<"NO"<<endl;
}signed main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);int _;cin>>_;while(_--)solve();return 0;
}
方法二
c n t [ x ] : 表示从起点到 x 所经过的最短路径的边数 cnt[x]:表示从起点到x所经过的最短路径的边数 cnt[x]:表示从起点到x所经过的最短路径的边数
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define inf 0x3f3f3f3f*1llusing namespace std;void solve()
{int n,m1,m2;cin>>n>>m1>>m2;vector<vector<pii>>g(n+1);rep(i,1,m1){int u,v,w;cin>>u>>v>>w;g[u].pb({v,w});g[v].pb({u,w});} rep(i,1,m2){int u,v,w;cin>>u>>v>>w;g[u].pb({v,-w});}vector<int>inq(n+1,0);vector<int>cnt(n+1,0);vector<int>d(n+1,0);queue<int>q;rep(i,1,n){q.push(i);inq[i]=1;}while(q.size()){auto t=q.front();q.pop();int u=t;inq[u]=0;for(auto it:g[u]){int v=it.x,w=it.y;if(d[v]>d[u]+w){d[v]=d[u]+w;cnt[v]=cnt[u]+1;if(cnt[v]>=n){cout<<"YES"<<endl;return;}if(!inq[v]){q.push(v);inq[v]=1;}}}}cout<<"NO"<<endl;
}signed main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);int _;cin>>_;while(_--)solve();return 0;
}
实际效果


方法一跑出来的结果是 1024 m s 1024ms 1024ms
方法二跑出来的结果是 671 m s 671ms 671ms
相关文章:
找负环(图论基础)
文章目录 负环spfa找负环方法一方法二实际效果 负环 环内路径上的权值和为负。 spfa找负环 两种基本的方法 统计每一个点的入队次数,如果一个点入队了n次,则说明存在负环统计当前每个点中的最短路中所包含的边数,如果当前某个点的最短路所…...
无人机飞控算法原理基础研究,多旋翼无人机的飞行控制算法理论详解,无人机飞控软件架构设计
多旋翼无人机的飞行控制算法主要涉及到自动控制器、捷联式惯性导航系统、卡尔曼滤波算法和飞行控制PID算法等部分。 自动控制器是无人机飞行控制的核心部分,它负责接收来自无人机传感器和其他系统的信息,并根据预设的算法和逻辑,对无人机的姿…...
关于内存相关的梳理
1 关键字 总结 (lowmemory,anr in) 2 知识储备 虚拟机原理 垃圾回收算法 又包含标记 和清除两种算法 标记:程序计数器-已过时,可达性分析 具体可见 http://help.eclipse.org/luna/index.jsp?topic%2Forg.ec…...
7.JS里表达式,if条件判断,三元运算符,switch语句,断点调试
表达式和语句的区别 表达式就是可以被求值的代码比如什么a 1 语句就是一段可以执行的代码比如什么if else 直接给B站的黑马程序员的老师引流一波总结的真好 分支语句 就是基本上所有的语言都会有的if else 语句就是满足不同的条件执行不同的代码,让计算机有条件…...
RK3568平台开发系列讲解(存储篇)文件句柄与文件描述符介绍
🚀返回专栏总目录 文章目录 一、什么是文件句柄二、什么是文件描述符2.1、files_struct 结构体2.2、fdtable 结构体三、数据结构关系图沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是文件句柄 用户空间的进程通过open系统调用打开一个文件之后,内核返回的就是…...
【C++】类和对象(五)友元、内部类、匿名对象
前言:前面我们说到类和对象是一个十分漫长的荆棘地,今天我们将走到终点,也就是说我们对于C算是正式的入门了。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C学习 &…...
攻防世界 CTF Web方向 引导模式-难度1 —— 1-10题 wp精讲
目录 view_source robots backup cookie disabled_button get_post weak_auth simple_php Training-WWW-Robots view_source 题目描述: X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。 不能按右键,按F12 robots …...
Docker之MongoDB安装、创建用户及登录认证
Docker之MongoDB安装、创建用户及登录认证 文章目录 Docker之MongoDB安装、创建用户及登录认证1. 拉取镜像2. 创建宿主机容器数据卷3. 运行mongodb容器1. 运行容器2. 创建用户3. 创建数据库并设置密码 1. 拉取镜像 docker pull mongo:4.2.212. 创建宿主机容器数据卷 运行docke…...
紫微斗数双星组合:天机天梁在辰戌
文章目录 前言内容总结 前言 紫微斗数双星组合:天机天梁在辰戌 内容 紫微斗数双星组合:天机天梁在辰戌 性格分析 在紫微斗数命盘中,天梁星是一颗“荫星”,能够遇难呈祥,化解凶危,主寿,主贵。…...
N-144基于微信小程序在线订餐系统
开发工具:IDEA、微信小程序 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:vue、ElementUI、 Vant Weapp 服务端技术:springbootmybatisredis 本系统分微信小程序和…...
[UI5 常用控件] 09.IconTabBar,IconTabHeader,TabContainer
文章目录 前言1. IconTabBar1.1 简介1.2 基本结构1.3 用法1.3.1 颜色,拖放,溢出1.3.2 Icons Only , Inner Contents1.3.3 showAll,Count,key,IconTabSeparator 1.3.4 Only Text1.3.5 headerMode-Inline1.3.6 design,IconTabSeparator-icon1.3.7 DensityM…...
CCF编程能力等级认证GESP—C++5级—20231209
CCF编程能力等级认证GESP—C5级—20231209 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)小杨的幸运数烹饪问题 答案及解析单选题判断题编程题1编程题2 单…...
【论文精读】GPT2
摘要 在单一领域数据集上训练单一任务的模型是当前系统普遍缺乏泛化能力的主要原因,要想使用当前的架构构建出稳健的系统,可能需要多任务学习。但多任务需要多数据集,而继续扩大数据集和目标设计的规模是个难以处理的问题,所以只能…...
10-k8s中pod的探针
一、探针的概念 一般时候,探针的设置,都是为了优化业务时,需要做的事情;属于后期工作; 1,探针的分类 1,健康状态检查探针:livenessProbe 当我们设置了这个探针之后,检查…...
【Langchain Agent研究】SalesGPT项目介绍(二)
【Langchain Agent研究】SalesGPT项目介绍(一)-CSDN博客 上节课,我们介绍了SalesGPT他的业务流程和技术架构,这节课,我们来关注一下他的项目整体结构、poetry工具和一些工程项目相关的设计。 项目整体结构介绍 我们把…...
《UE5_C++多人TPS完整教程》学习笔记4 ——《P5 局域网连接(LAN Connection)》
本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P5 局域网连接(LAN Connection)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者&…...
【运维测试】移动测试自动化知识总结第1篇:移动端测试介绍(md文档已分享)
本系列文章md笔记(已分享)主要讨论移动测试相关知识。主要知识点包括:移动测试分类及android环境搭建,adb常用命令,appium环境搭建及使用,pytest框架学习,PO模式,数据驱动࿰…...
高校疫情防控系统的全栈开发实战
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...
OpenTitan- 开源安全芯片横空出世
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
简单的edge浏览器插件开发记录
今天在浏览某些网页的时候,我想要屏蔽掉某些信息或者修改网页中的文本的颜色、背景等等。于是在浏览器的控制台中直接输入JavaScript操作dom完成了我想要的功能。但是每次在网页之间跳转该功能都会消失,我需要反复复制粘贴js脚本,无法实现自动…...
开源KMS激活神器:3分钟搞定Windows和Office永久激活难题
开源KMS激活神器:3分钟搞定Windows和Office永久激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗?KMS_VL_ALL_AIO是一款开…...
别死记硬背!用‘小明小红在操场’的JavaScript题,彻底搞懂this、call和箭头函数
从操场运动到代码执行:用生活场景拆解JavaScript的this与箭头函数 操场上的小明和小红正在运动,这个看似简单的场景却暗藏JavaScript中this指向的玄机。当我们把人物动作转化为代码时,this的指向问题往往成为初学者的"绊脚石"。本文…...
思源宋体TTF终极指南:免费获取7种字重的完整解决方案
思源宋体TTF终极指南:免费获取7种字重的完整解决方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目寻找既专业又完全免费的高质量字体吗?思…...
深度学习优化算法(三)—— 自适应学习率(AdaGrad/RMSProp/Adam/AdamW)(三十五)
1. 定位导航 第 34 篇我们解决了"方向"问题(Momentum 让训练快 10)。本篇解决另一个核心问题:每个参数应该用多大学习率? 第 8 章规划进度: 篇号 主题 状态 33 优化挑战 ✅ 34 SGD + Momentum + Nesterov ✅ 35(本篇) 自适应学习率 🚀 36 参数初始化策略 …...
从《西部世界》到现实:AI智能体如何重塑游戏NPC与虚拟社会?
从《西部世界》到现实:AI智能体如何重塑游戏NPC与虚拟社会? 当《西部世界》中的NPC开始拥有记忆、情感和自主决策能力时,观众惊叹于科幻与现实的边界正在模糊。如今,大型语言模型(LLM)驱动的AI智能体正将这…...
Unity游戏接入TapTap登录,从后台配置到打包上线的完整避坑指南
Unity游戏接入TapTap登录的全流程避坑指南:从配置到上线的实战经验 在独立游戏开发领域,TapTap平台凭借其庞大的用户基础和便捷的登录系统,已成为许多开发者的首选接入方案。然而,从后台配置到最终打包上线的完整流程中࿰…...
如何在3分钟内为Photoshop安装AVIF插件:让你的图片体积减半的终极方案
如何在3分钟内为Photoshop安装AVIF插件:让你的图片体积减半的终极方案 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 还在为网站图片加载缓慢而烦恼…...
【CH32V307实战】4P OLED屏I2C驱动移植与快速显示指南
1. CH32V307与4P OLED屏的硬件连接指南 第一次拿到CH32V307开发板和4P OLED屏时,最让我头疼的就是接线问题。这种4线制OLED(通常标注为4P或4PIN)相比传统的7线制简化了不少,但引脚定义各家厂商可能略有差异。经过多次实测…...
3D打印乐高手机支架:低成本打造高清视频会议摄像头方案
1. 项目概述与核心思路如果你和我一样,对视频会议、直播时笔记本自带摄像头那“感人”的画质感到无奈,同时又觉得单独购买一个高品质的网络摄像头是一笔不小的开销,那么这个项目绝对值得你花上一个周末的时间来折腾。它的核心思路非常巧妙&am…...
告别手动框选!用SUSTechPOINTS的V键批量标注,5分钟搞定一帧点云
解锁SUSTechPOINTS的V键批量标注:点云处理效率革命 在自动驾驶与机器人研发领域,点云标注是构建高精度感知模型的基础环节,但传统逐帧手动标注方式往往成为项目进度的瓶颈。我曾参与过一个城市级点云数据集标注项目,团队最初采用常…...
