尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
洛谷 P3385:[模板] 负环 ← SPFA 算法
【题目来源】https://www.luogu.com.cn/problem/P3385【题目描述】给定一个 n 个点的有向图请求出图中是否存在从顶点 1 出发能到达的负环。负环的定义是一条边权之和为负数的回路。【输入格式】本题单测试点有多组测试数据。输入的第一行是一个整数 T表示测试数据的组数。对于每组数据的格式如下第一行有两个整数分别表示图的点数 n 和接下来给出边信息的条数 m。接下来 m 行每行三个整数 u,v,w。1若 w≥0则表示存在一条从 u 至 v 边权为 w 的边还存在一条从 v 至 u 边权为 w 的边。2若 w0则只表示存在一条从 u 至 v 边权为 w 的边。【输出格式】对于每组数据输出一行一个字符串若所求负环存在则输出 YES否则输出 NO。【输入样例】23 41 2 21 3 42 3 13 1 -33 31 2 32 3 43 1 -8【输出样例】NOYES【数据范围】对于全部的测试点保证1≤n≤2×10^31≤m≤3×10^3。1≤u,v≤n−10^4≤w≤10^4。1≤T≤10。​​​​​​​【算法分析】● 请注意m 不是图的边数。● 简单版的利用 SPFA 判断负环问题详见https://blog.csdn.net/hnjzsyjyj/article/details/138470784● SPFA 算法1SPFA 算法即最短路径快速算法是基于 Bellman-Ford 算法优化而来的单源最短路径算法适用于带负权边、无负权环的有向图或无向图在算法竞赛中应用广泛。2SPFA 算法借助队列对 Bellman-Ford 算法进行优化仅将松弛成功、距离被更新的节点入队只处理存在更新潜力的节点减少冗余运算。3在 CSP/NOIP 等算法竞赛中遇到负权图优先选用 SPFA 算法求最短路径若图无负权边推荐堆优化 Dijkstra求最短路径。● SPFA 算法核心流程1初始化距离数组 dist[]。设 dist[s] 代表起点 s 到各点的最短距离先将起点距离置为 0其余节点初始化为无穷大。同时创建队列保存被松弛更新成功的待处理节点并借助 st[] 数组标记节点入队状态以此避免节点重复入队减少冗余计算。2循环取出队首节点 u遍历 u 的全部邻边 u→v。若满足松弛条件 dist[v]dist[u]w(u,v)则更新 dist[v]如果本次松弛成功且节点 v 不在队列中就将 v 入队。持续迭代直到队列为空。3队列为空算法结束。若任意节点入队次数≥节点总数 n说明图中存在负环。​​​​​​​【算法代码】#include bits/stdc.h using namespace std; const int N2e35; const int M3e35; int val[M1],e[M1],ne[M1],h[N],idx; int dis[N],cnt[N]; bool st[N]; int n,m; void add(int a,int b,int w) { val[idx]w,e[idx]b,ne[idx]h[a],h[a]idx; } int spfa() { queueint Q; memset(dis,0x3f,sizeof dis); memset(st,0,sizeof st); memset(cnt,0,sizeof cnt); dis[1]0; Q.push(1); st[1]true; while(!Q.empty()) { int tQ.front(); Q.pop(); st[t]false; for(int ih[t]; i!-1; ine[i]) { int je[i]; if(dis[j]dis[t]val[i]) { dis[j]dis[t]val[i]; cnt[j]cnt[t]1; if(cnt[j]n) return true; if(!st[j]) { Q.push(j); st[j]true; } } } } return false; } int main() { int T; cinT; while(T--) { cinnm; idx0; memset(h,-1,sizeof h); while(m--) { int a,b,c; cinabc; if(c0) { add(a,b,c); add(b,a,c); } else add(a,b,c); } if(spfa()) coutYES\n; else coutNO\n; } return 0; } /* in: 2 3 4 1 2 2 1 3 4 2 3 1 3 1 -3 3 3 1 2 3 2 3 4 3 1 -8 out: NO YES */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/138470784
RELATED

相关推荐

账号受限率偏高,环境问题一般出在哪?

账号受限率偏高,环境问题一般出在哪?

一、新手面对十几款产品,为什么总觉得无从下手这两年做多账号管理的人越来越多,打开搜索引擎一搜"指纹浏览器",蹦出来的产品少说十几款:Multilogin、Octo Browser、BitBrowser、GoLogin、AdsPower、Dolphin Anty、ixBro…

📅 2026/9/29 21:36:12
AI 训练数据集供应商怎么挑?能力、案例、服务全维度解析

AI 训练数据集供应商怎么挑?能力、案例、服务全维度解析

在人工智能模型加速迭代的当下,如何挑选靠谱的AI训练数据集供应商已成为企业构建核心竞争力的关键。面对数据来源分散、合规风险高企及质量参差不齐的现状,选择具备海量版权素材且能合规赋能AI训练的合作伙伴至关重要。卓特视觉(Droitstock&a…

📅 2026/9/29 21:36:12
工业智能体 Hermes Agent 部署实战:用 Docker Compose 打通 MES 与 IoT 落地链路(含 TaoToken 配置)

工业智能体 Hermes Agent 部署实战:用 Docker Compose 打通 MES 与 IoT 落地链路(含 TaoToken 配置)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/29 21:31:11
MORE NEWS

更多资讯

📰

Agent训练场架构设计:日跑300万沙箱的评分与防作弊实践

1. 从标题拆解:一个“Agent 训练场”到底在解决什么问题“一天跑 300 万个沙箱”这个数字第一次看到的时候,我下意识算了一笔账:一天 86400 秒,300 万个沙箱意味着平均每秒要拉起并跑完大约 35 个隔离环境。这不是“跑个 demo”的…

📰

AI 伦理与安全

AI 伦理与安全你可能觉得伦理是个很抽象的词,离日常生活很远。但想想这些场景:招聘时用 AI 筛选简历,结果它把所有女性求职者都淘汰了——不是因为它有偏见,而是因为训练数据里历史上的成功者多为男性。有人把公司的商业机密输入 …

📰

免费网页翻译插件,支持英文页面双语对照阅读

WoDeTool 1.3.0:新增网页翻译,英文页面双语对照阅读 翻译后保留原文,滚动自动续译,随时可还原。 更新日期:2026 年 9 月 25 日 安装地址:在线安装 一句话说明 WoDeTool 1.3.0 新增 网页翻译(英…

📰

秋日晨拍新诗——颗颗新绿肺晶莹,吐纳蕴育气真香

《景观榕》〖自创文体:『双“绝”联排』,分绝合排。😋🤗〗作者:当代梦幻精灵_cq独树成林小叶榕 ​玉冠塔云翠印光 气根板墙筑根基 城市景观傲风霜颗颗新绿肺晶莹 吐纳蕴育气真香 座座工坊运转忙 维系充氧恒久刚炼字说明…

📰

DeepAgents+MCP+A2A+Skills:构建可编排可扩展的多智能体集群

最近的实践重点一直放在一件事上:把零散的 Agent 从“单个玩具”拼成“一组能干活的团队”。试了几套主流方案之后,我发现当前最值得跟进的一条技术路线,就是标题里这组词:DeepAgents、MCP、A2A、Skills。你可以把 DeepAgents 理解…

📰

新人的第一篇文章

我是一个长得像I人的I人,对于一个新手而言学好C语言是最想要达到的目标,至于为什么学编程自然是为了想要提升自己,提高自己的质量。对于我自己来说,我愿意投入很多时间和精力,如果时间允许我将保持每天1到2小时的时间&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬