spfa 判断负环

简介: 笔记

SPFA判断负环


基本过程与spfa求最短路相同,但是额外记录一个 cnt数组,表示到当前点的最短路经过的边的条数,如果cnt[i]>=n说明一定存在一个负环。

此外,初始化队列的时候,要将所有点都加入队列,因为1可能到不了负环存在的位置。

#include<bits/stdc++.h>
#include<unordered_map>
// #define int long long
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3f
#define mod 1000000007
#define MOD 998244353
#define rep(i, st, ed) for (int (i) = (st); (i) <= (ed);++(i))
#define pre(i, ed, st) for (int (i) = (ed); (i) >= (st);--(i))
#define debug(x,y) cerr << (x) << " == " << (y) << endl;
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
template<typename T> inline T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<typename T> inline T lowbit(T x) { return x & -x; }
//template<typename T> T qmi(T a, T b = mod - 2, T p = mod) { T res = 1; b %= (p - 1 == 0 ? p : p - 1); while (b) { if (b & 1) { res = (LL)res * a % p; }b >>= 1; a = (LL)a * a % p; }return res % mod; }
const int N = 1e5 + 10;
int n, m;
vector<PII>vec[N];
int d[N], cnt[N];
bool vis[N];
bool spfa() {
    queue<int>q;
    memset(d, 0x3f, sizeof d);
    d[1] = 0;
    vis[1] = true;
    for (int i = 1; i <= n; ++i)q.push(i);
    while (q.size()) {
        int t = q.front();
        q.pop();
        vis[t] = false;
        for (int i = 0; i < vec[t].size(); ++i) {
            int j = vec[t][i].second;
            int dis = vec[t][i].first;
            if (d[j] > d[t] + dis) {
                d[j] = d[t] + dis;
                if (!vis[j])q.push(j);
                cnt[j] = cnt[t] + 1;
                if (cnt[j] >= n)return true;
            }
        }
    }
    return false;
}
void solve() {
    cin >> n >> m;
    while (m--) {
        int u, v, w; scanf("%d%d%d", &u, &v, &w);
        vec[u].push_back({ w,v });
    }
    if (spfa())puts("Yes");
    else puts("No");
}
signed main() {
    // int _; cin >> _;
    // while (_--)
        solve();
    return 0;
}
目录
相关文章
|
算法 网络协议
生成树协议:网络稳定的守护者
【4月更文挑战第22天】
555 0
|
6月前
|
传感器 机器学习/深度学习 算法
PID期刊论文复现之基于Simulink四旋翼无人机PID控制
PID期刊论文复现之基于Simulink四旋翼无人机PID控制
355 1
|
6月前
|
数据采集 人工智能 监控
天猫商品详情API全解析
天猫商品详情API是淘宝开放平台提供的官方接口,合规、高效获取天猫商品全量结构化数据(价格、销量、规格等),支持精准筛选与实时同步,助力选品决策、竞品分析与智能运营,规避爬虫风险。(239字)
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
644 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
9月前
|
机器学习/深度学习 人工智能 搜索推荐
基于人类反馈的强化学习:对齐AI与人类价值观的技术革命
基于人类反馈的强化学习(RLHF)是一种通过人类偏好来训练AI的技术,使其行为更符合人类价值观。它分三阶段:先用示范数据微调模型,再训练奖励模型预测人类偏好,最后用强化学习优化模型。相比传统方法,RLHF在安全性、创造力、数据效率等方面优势显著,能有效提升AI的对齐性与实用性,是实现有益人工智能的关键路径。
|
11月前
|
C#
.NET编程技巧:C#中字节与其他数据类型转换方法
在C#中将不同数据类型互相变更至二进制格式需要注意每种数据类型特定方法以及可能涉及特定系统资源比如内存流等。正确理解每种方法并选择最适合当前场景下最高效率且安全性高且易于维护代码方式至关重要。
451 13
|
JSON 前端开发 API
deepseek0528发布
DeepSeek-R1-0528 是 DeepSeek 团队于 2025 年发布的 R1 推理大模型升级版,虽定位为“小版本试升级”,但表现远超预期。其在数学推理(AIME 测试准确率提升至 87.5%)、编程能力(接近 OpenAI o3 水平,可生成 1000+ 行无 bug 代码)、长文本处理(支持 128K tokens)及写作质量等方面均有显著提升。此外,新增 Function Calling 和 JSON 输出功能,便于开发者集成。用户可通过 Ollama 本地部署或访问 https://chat.deepseek.com/ 在线体验满血版。
|
Java 关系型数据库 MySQL
ssm063基于SSM框架的德云社票务系统的设计与实现(文档+源码)_kaic
基于SSM框架的德云社票务系统旨在解决传统相声订票方式费时费力的问题,提供便捷的在线订票平台。系统采用Java技术、MySQL数据库,结合B/S架构,确保数据安全性和操作简便性。用户可轻松查询、预订相声票务信息,管理员则能高效管理票务和会员信息。该系统功能齐全、运行稳定,适用于现代信息化生活需求,有效提升德云社的票务管理效率与用户体验。
|
开发工具 开发者 容器
【HarmonyOS NEXT开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
从ArkTS代码架构层面而言,@Entry指明入口、@Component助力复用、@Preview便于预览,只是初窥门径,为开发流程带来些许便利。尤其动画回调与Blank组件,细节粗糙,后续定当潜心钻研,力求精进。”,字体颜色为白色,字体大小等设置与之前类似,不过动画配置有所不同,时长为。,不过这里没有看到额外的动画效果添加到这个特定的图片元素上(与前面带动画的元素对比而言)。这是一个显示文本的视图,文本内容为“奇怪的知识”,设置了字体颜色为灰色(的结构体,它代表了整个界面组件的逻辑和视图结构。
609 1