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

SPFA求负环

SPFA看入队次数,入队次数>n则说明一定有负环

#include<bits/stdc++.h>
using namespace std;
const int maxn=2005;
const int maxm=20005;
const long long inf=2147483647;
int n,m,cnt0;
int dis[maxn],vis[maxn],head[maxn],cnt[maxn];
struct Edge
{int nxt,to,dis;
}edge[maxm];
void add(int u,int v,int w)
{edge[++cnt0].nxt=head[u];edge[cnt0].to=v;edge[cnt0].dis=w;head[u]=cnt0;
}
bool spfa()
{queue<int> q;for(int i=1;i<=n;i++){dis[i]=inf;vis[i]=0;}q.push(1);dis[1]=0;vis[1]=1;cnt[1]++;while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].to;if(dis[v]>(long long)dis[u]+edge[i].dis){dis[v]=dis[u]+edge[i].dis;if(vis[v]==0){vis[v]=1;q.push(v);cnt[v]++;if(cnt[v]>n) return 1;}}}}return 0;
}
void init()
{memset(dis,0,sizeof dis);memset(vis,0,sizeof vis);memset(cnt,0,sizeof cnt);memset(edge,0,sizeof edge);memset(head,0,sizeof head);cnt0=0;
}
int main()
{int T;cin>>T;while(T--){init();cin>>n>>m;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;add(u,v,w);if(w>=0) add(v,u,w);}if(spfa()) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}
``
http://www.wxhsa.cn/company.asp?id=334

相关文章:

  • 磁盘存储器
  • 多变量的递归2-组合总和问题(每个数字可以使用多次)
  • 戴尔Precision 7865 塔式工作站|安装rocky liunx 8.10
  • 基于STM32F411的AM2320温湿度采集程序
  • jmeter测试mysql
  • 博弈论杂谈
  • 基于MATLAB的图像配准与拼接实现
  • ESP-IDF在vscode环境下编译速度
  • Docker容器
  • EtherCAT总线介绍及耦合器EK1100
  • centos服务器定时任务备份数据库脚本
  • 小红书全量笔记数据集(含标题、正文、标签、互动量、图片等),可用于NLP、推荐算法、大模型训练、爆款文章生成、精准营销与市场分析
  • PVE跨集群迁移虚机
  • CF2022E 题解 | 数学、并查集
  • 领悟2025.9.10
  • Codeforces Round 1049 (Div. 2)
  • 告别资料混乱!PJMan 让项目文件管理,简单到不用找
  • 公众号文章如何添加附件?微信公众号支持附件下载Word、Excel、PDF、PPT等
  • 揭秘LedgerCTF的AES白盒挑战:逆向工程与密码学分析
  • Java11-快速启动指南-全-
  • 三万小时PB级院线级电影数据集,包含完整视频、音频和字幕多模态资源,专为视频大模型训练和多模态研究设计,适用于文生视频生成、影视剪辑、语义检索及智能内容管理
  • openssl编程之sm3哈希代码示例
  • CRMEB标准版PHP订单列表功能解析与实战应用
  • timescaledb在ubuntu上的高可用部署步骤记录
  • Mybatis
  • vue3不允许缓存组件keep-alive直接包裹router-view
  • 你的部署流程已然落伍-热重启的失传艺术
  • 安全不是一个功能-而是一个地基
  • Hall 定理相关
  • docker save load 案例