[模板]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大神商量后,这道猥琐的题目终于出现在本次试题上了 ...
随机推荐
- Swift:字符串(String)分割之Substring优雅转换
认识Substring类型 这是一个全新的类型,看类名像是String的子类,但是大家千万别被误导了,Substring并不是String的子类,这是两个不同的类型,但是它们都继承了StringPro ...
- vue one
目录 复习 Vue框架 Vue的优点 Vue的使用 vue完成简单的事件 vue操作简单样式 小结 指令 文本指令 事件指令 属性指令 条件指令 复习 """ 1.BBS ...
- Java井字棋游戏
试着写了一个井字棋游戏,希望各位能给予一些宝贵的建议. 一.棋盘类 package 井字棋游戏; public class ChessBoard { private int number; Perso ...
- 国内外主要的PHP开源CMS系统分析
国内PHP开源CMS内容管理系统从程序框架,模版加载到程序功能上都有很大的进步,大部分都采用了自定义模块,自定义模型的方式,同时提供各个CMS都提供不同的特色功能,CMS内容管理系统一直影响着互联网的 ...
- setAttribute 方法
IE8及以下不支持 setAttribute用来修改dom标签上的属性比如(onclick); getAttribute用来获取dom标签上的属性
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
概要 最近写了spring系列,这个系列还在进行中,然后有些同学开始叫我大神,然后以为我各方面都比较厉害,当然了,我是有自知之明的,大佬大神什么的,当作一个称呼就好,如果真的以为自己就是大神,那可能就 ...
- SpringBoot中遇到的一些问题
1.JQuery和bootstrap报404的问题 在html页面导入的js和css的时候,不要加static这级目录,直接跳过即可,例如 导入的时候不需要加static目录,直接导入js/和css/ ...
- tkinter gui控件回调和grid布局优化
0.引子 Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序.由于 Tkinter 是内置到 python 的安装包中.只要安装 ...
- Python学习前端之JavaScript
JavaScript介绍 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客户端执行的语言). Nets ...
- wireshark一开,无线网络就断开
最近在研究wireshark 笔记本连着wifi,开始抓包后,无线网就断了 查了半天,需要把捕获-->选项里的监控模式去掉就行了