[模板]SPFA判负环
一、BFS法判负环
Code:
#include<bits/stdc++.h>
#define re register
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int first[8000],next[8000],go[8000],tot,cost[8000];
int dist[8000],vis[8000],add[8000];
inline void add_edge(int u,int v,int w){
next[++tot]=first[u];
first[u]=tot;
go[tot]=v;cost[tot]=w;
}
inline void read(int &x){
x=0;int flag=1;char ch=getchar();
while(isdigit(ch)){if(ch=='-') flag=-1;ch=getchar();}
while(!isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x*=flag;
}
int SPFA(){
queue<int> q;
for(int i=1;i<=n;i++){dist[i]=INF;vis[i]=0;}
dist[1]=0;vis[1]=1;q.push(1);
while(!q.empty()){
int u=q.front();
q.pop();vis[u]=0;
for(int e=first[u];e;e=next[e]){
int v=go[e],w=cost[e];
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
add[v]++; //核心代码
if(add[v]>n) return 1;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
return 0;
}
int main()
{
read(n),read(m);
for(re int i=1;i<=m;i++){
int u,v,w;
read(u),read(v),read(w);
add_edge(u,v,w);
}
if(SPFA()) printf("YES\n");
else printf("NO\n");
return 0;
}
二、DFS法判负环
给出主体部分,其余部分与上一个代码类似。
Code:
int SPFA(int u)
{
vis[u]=1;
for(int i=first[u];i;i=next[i])
{
int v=go[i],w=cost[i];
if(dist[v]>dist[u]+w)
{
dist[v]=dist[u]+w;
if(vis[v]||SPFA(v)){
vis[v]=0;
return 1;
}
}
}
vis[u]=0;
return 0;
}
三、SPFA判正环
- 由原来的最短路改为最长路
- 将权值变为原来的相反数并跑最短路判负环

[模板]SPFA判负环的更多相关文章
- SPFA判负环模板
void DFS_SPFA(int u){ if(flag) return; vis[u]=true; for(int i=head[u];i;i=edges[i].nxt){ if(fl ...
- 浅谈SPFA判负环
目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
- Poj 3259 Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...
- spfa判负环
bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...
- poj 1364 King(线性差分约束+超级源点+spfa判负环)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14791 Accepted: 5226 Description ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划
BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...
- [P1768]天路(分数规划+SPFA判负环)
题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...
随机推荐
- 控制游戏/app使用期限/过期,证书有效期,弹出公告支持离线使用/后端控制,支持Swift、Objective-C集成非常简单,永久免费框架
CertCheck.framework (for iOS) 只能运行于真机上,切勿在模拟器上使用 这是一个控制游戏/app使用期限(到设定的时间无法打开app),或发布弹出公告永久免费的框架,可以全版 ...
- Functional mechanism: regression analysis under differential privacy_阅读报告
Functional mechanism: regression analysis under differential privacy 论文学习报告 组员:裴建新 赖妍菱 周子玉 2020 ...
- demo26-路径
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Hinton老爷子CapsNet再升级,结合无监督,接近当前最佳效果
2017 年,Geoffrey Hinton 在论文<Dynamic Routing Between Capsules>中提出 CapsNet 引起了极大的关注,同时也提供了一个全新的研究 ...
- SpringCloud-Nacos/OpenFien/Gateway的基本介绍及快速上手
一.Spring-Cloud-Alibaba-Nacos 注册中心 1.下载.安装 Nacos 下载地址:https://github.com/alibaba/nacos/releases 下载后解压 ...
- netty实现群聊功能
[概述] 实现一个网络群聊工具.参与聊天的客户端消息是通过服务端进行广播的. 主要由两块组成:聊天服务器端(ChatServer)和聊天客户端(ChatClient). 聊天服务器(ChatServe ...
- 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型
DATETIME类型 定义同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00' ...
- Java ArrayList自动扩容机制
动态扩容 1.add(E e)方法中 ① ensureCapacityInternal(size+1),确保内部容量,size是添加前数组内元素的数量 ② elementData[size++] ...
- Mac word文档的消失问题以及解决方案
最近用mac电脑上的Microsoft Word写文档时,出现一个很奇怪的现象:明明我已经保存了文档到某个目录下,但是当我退出Word后,准备去保存目录找文档时发现文档消失了,前一秒还在!!! 通过各 ...
- Blazor入门笔记(4)-组件的生命周期
1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 Blaz ...