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

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;
}
http://www.rkmt.cn/news/80023.html

相关文章:

  • 深入解析:PostgreSQL 向量扩展插件pgvector安装和使用
  • 2025年国内诚信的微动开关制造厂家推荐榜单,家电微动开关/鼠标微动开关/防水微动开关/微动开关/小型微动开关微动开关制造厂家哪里有 - 品牌推荐师
  • 前端半小时,上线一下午?我用这个平台工程思路统一了全栈部署
  • 编程小白必看!免费体验课大搜罗 - 品牌测评鉴赏家
  • SAT 辅导哪里好?2025 年优质机构推荐(含精准选择指南) - 品牌测评鉴赏家
  • keepalived搭建高可用
  • 2025全屋定制十大品牌哪家好?欧蒂尼硬核实力破局,领衔品质家居新革命 - 资讯焦点
  • P3275 [SCOI2011] 糖果 题解
  • 数据采集第四次作业-102302128吴建良
  • Daily Report — Day 4 (Beta)
  • 12.09
  • 完整教程:浏览器工作原理大揭秘:从输入网址到看到页面的奇妙旅程
  • 什么是API?一文让你彻底搞明白! - 智慧园区
  • 告别选择困难!SAT辅导机构大揭秘 - 品牌测评鉴赏家
  • igbt模块的栅极驱动芯片,栅极电阻计算
  • 构建高准确率、可控、符合规范的政务数据库审计和监测方案
  • TK: 计算三角形的面积
  • SAT 辅导机构怎么选?2025 年高性价比机构测评指南(附避坑攻略) - 品牌测评鉴赏家
  • SAT 辅导机构怎么选?2025 年高性价比机构测评与避坑指南(附收费标准与选课攻略) - 品牌测评鉴赏家
  • 2025年铁路地铁电力电缆生产厂家推荐:中低压、低压、中压、变频、聚乙烯绝缘电缆厂家精选指南 - 品牌2026
  • 2025电缆品牌精选:中国电缆一线品牌推荐及十大知名品牌推荐 - 品牌2026
  • langchain4j 学习系列(7)-文本分类
  • 实用指南:OCR与AI赋能医药资质审核的全流程自动化方案
  • Spark的运行架构,RDD自带容错机制分析 - f
  • 解码多态、虚函数——动态行为扩展
  • 2025托福培训机构选择指南:精准匹配你的提分需求
  • 2025托福辅导机构优选指南:从口碑到提分的全方位攻略
  • 使用VSCode开发ESP32单片机基于MicroPython-12.8
  • 过碳酸钠选购指南:优质厂家推荐及欧盟标准供应商盘点
  • DBLens 连接数怎么限制?免费 3 个,订阅随便加