[模板]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大神商量后,这道猥琐的题目终于出现在本次试题上了 ...
随机推荐
- Swift5.2 新特性
Print 函数传参新格式 let param = "参数" print(#"这是一个\#(param) xxxxx"#) 允许在模块中定义和标准库中名称一样的 ...
- idea安装 阿里巴巴Java编码准则插件
首先还是打开熟悉的idea 在marketplace 输入 alibaba 我这是已经安装过了 下载完成之后重启idea生效 如果需要那就手动的扫描 当然已经自动的扫描了 如果你的代码不符合阿里的标准 ...
- 记一次Xmrig挖矿木马排查过程
问题现象 Linux 服务器收到报警信息,主机 CPU 跑满. 自动创建运行 Docker 容器 xmrig, 导致其他运行中容器被迫停止. 问题原因 通过 top 命令可以看到有一个 xmrig 进 ...
- 简易版cnlog
目录 简易版cnlog html文件 mycess.cess 页面效果 简易版cnlog 注意的点 1.一定先分好块标签,再基于一个个块标签进行装饰(相当于给一个个人化妆) 2.浮动: 我的理解是从一 ...
- hdu1253胜利大逃亡(城堡的怪物太狠,主角难免天天逃亡)
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1253/ 其实就是二维扩展到三维了,增加了搜索方向,其他的没什么不同. 代码如下: #include<bit ...
- ML-Agents(三)3DBall例子
ML-Agents(三)3DBall例子 前一周忙着公司的考试,都没有怎么学新的,今天补上~ 之后的记录,我准备先只研究官方的示例,主要是把研究过程中的疑惑和想法记下来.首先我先补充一下如何利用GPU ...
- python环境变量忘记配置
Python安装没有勾选配置环境变量安装 解决方法一: 于是,便用安装包卸载后重新安装. 重新安装勾选 安装成功 方法二: 配置环境变量 A.右键点击“我的电脑”,点击“属性”: B.在弹出的界面中点 ...
- Longest subarray of target sum
2018-07-08 13:24:31 一.525. Contiguous Array 问题描述: 问题求解: 我们都知道对于subarray的问题,暴力求解的时间复杂度为O(n ^ 2),问题规模已 ...
- 【笔记3-27】Python语言基础
流程控制语句 if语句 input() if-else if-elif-else
- 如何定时备份Mysql数据库
1.创建备份数据库存储目录 cd data/db mkdir backup #创建存储目录 2.添加备份脚本 vim backupdb.sh #创建脚本文件 脚本内容如下: #!/bin/sh db_ ...