尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P3385 【模板】负环 题解

P3385 【模板】负环 题解
📅 发布时间:2026/6/20 17:54:27
P3385 【模板】负环 题解

差分约束系统是什么?

差分约束系统指的是一个序列 \(x={x_1,x_2,\cdots x_m}\) 和以如下形式出现的 \(n\) 元一次不等式组。

\[\left\{\begin{matrix} x_{i_1}-x_{j_1}\le c_{k_1}\\x_{i_2}-x_{j_2}\le c_{k_2}\\\vdots\\x_{i_n}-x_{j_n}\le c_{k_n}\end{matrix}\right. \]


还是说说前置知识。

P3385 【模板】负环

Description

给你一个 \(n\) 个点的有向图,让你判断图中是否有能从 \(1\) 号点出发可以到达的负环。

负环定义为一条边权和为负的回路。

Solution

思考负环的一些性质。

容易发现负环上一点与任意一点的最短路都不存在,因为你可以跑无数遍负环,边权和会越来越大。我们需要做的是找出一个限度值,如果超过了这个限度值就知道出现了负环。

注意到跑完一次单源最短路最多也就是把所有节点全部入队更新。如果点数为 \(n\),同一个节点最多只可能入队 \(n-1\) 次。

所以,开一个数组 cnt 记录每个节点入队的次数,如果次数超过 \(n-1\) 就说明有负环。

SPFA 在卡满情况下与朴素 Bellman-Ford 复杂度都为 \(O(nm)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long T,n,m,tot,head[2005],dis[2005],cnt[2005];
bool vis[2005];
queue<int>q;
struct node{int from,to,w,nxt;
}e[6005];
inline void add_edge(int u,int v,int w){e[++tot].from=u;e[tot].to=v;e[tot].w=w;e[tot].nxt=head[u];head[u]=tot;return;
}
inline bool SPFA(int s){memset(dis,63,sizeof(dis));dis[s]=0;vis[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i;i=e[i].nxt){int v=e[i].to,w=e[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){cnt[v]++;if(cnt[v]>=n){return 1;}vis[v]=1;q.push(v);}}}}return 0;
}
signed main(){cin>>T;while(T--){tot=0;memset(head,0,sizeof(head));memset(e,0,sizeof(e));memset(vis,0,sizeof(vis));memset(cnt,0,sizeof(cnt));while(!q.empty()){q.pop();}cin>>n>>m;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;if(w>=0){add_edge(u,v,w);add_edge(v,u,w);}else{add_edge(u,v,w);}}if(SPFA(1)){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}

相关新闻

  • 深入解析:PostgreSQL 向量扩展插件pgvector安装和使用
  • 2025年国内诚信的微动开关制造厂家推荐榜单,家电微动开关/鼠标微动开关/防水微动开关/微动开关/小型微动开关微动开关制造厂家哪里有 - 品牌推荐师
  • 前端半小时,上线一下午?我用这个平台工程思路统一了全栈部署

最新新闻

  • 【大模型应用开发-实战】(四)nvitop: 史上最强GPU性能实时监测工具
  • Selenium 4升级指南:解决executable_path报错与驱动管理最佳实践
  • Koodo Reader语音朗读:让眼睛休息,让耳朵工作的阅读新方式
  • 3个隐藏参数彻底释放DBeaver数据导入潜能
  • Chili3D:如何在浏览器中实现专业级3D CAD建模的完整技术解析
  • d2s-editor:如何用可视化工具解决暗黑破坏神2存档编辑难题

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号