差分约束建边方法

1.求最大值,用最短路,不等式转化成 a <= b + c形式,从b向a建立权值为c的边gb.append((a,c))

2.求最小值,用最长路,不等式转化成a >= b + c形式,从b向a建立权值为c的边

python 复制代码
import sys
from collections import defaultdict, deque

from math import inf, sqrt

RI = lambda: int(sys.stdin.readline().strip())
RS = lambda: sys.stdin.readline().strip()
RII = lambda: map(int, sys.stdin.readline().strip().split())
RILIST = lambda: list(RII())

g = defaultdict(list)
n,ml,md = RII()
# 求最大值,用最短路,a <= b + c形式表示
# 按顺序排列,要求 i <= (i + 1) + 0
for i in range(1,n + 1):
    g[i + 1].append((i,0))
# b - a <= l  b <= a + l
for _ in range(ml):
    a,b,l = RII()
    if b < a:
        a,b = b,a
    g[a].append((b,l))
# b - a >= d  a <= b - d
for _ in range(md):
    a,b,d = RII()
    if b < a:
        a,b = b,a
    g[b].append((a,-d))

dis = [inf]*(n + 1)

def spfa(k):
    # 最短路,找负环
    global dis
    dis = [inf]*(n + 1)
    cnt = [0]*(n + 1)
    st = [0]*(n + 1)
    q = deque()
    for i in range(1,k + 1):
        dis[i] = 0
        st[i] = 1
        q.append(i)
    while q:
        u = q.popleft()
        st[u] = 0
        for v,w in g[u]:
            if dis[v] > dis[u] + w:
                dis[v] = dis[u] + w
                cnt[v] = cnt[u] + 1
                if cnt[v] >= n:
                    return True
                if not st[v]:
                    st[v] = 1
                    q.append(v)
    return False

if spfa(n):
    print(-1)
else:
    spfa(1)
    if dis[n] == inf:
        print(-2)
    else:
        print(dis[n])
相关推荐
Evand J7 分钟前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
打码的老程是远篁25 分钟前
手把手教你玩转大模型——3. Transformer 的位置编码——模型怎么知道谁在前,谁在后?
人工智能·算法
嘎嘎风26 分钟前
MiniMind 学习笔记之 06 一张图、一百行:MiniMind 的骨架
算法·源码
用户73416810354829 分钟前
只盯被动响应做状态监测?论“控制信号”在变工况故障诊断中的重要作用
算法
Ivanqhz31 分钟前
MQA、GQA、稀疏/滑动窗口注意力及混合范式
人工智能·算法·机器学习
罗湖老棍子40 分钟前
荒岛野人(信息学奥赛一本通- P1637)(洛谷-P2421)
算法·数论·枚举·裴蜀定理·扩展欧几里得·扩展中国剩余定理
朝朝辞暮i44 分钟前
C++ 第 40 章:ROS2 Publisher + Timer + Subscriber + Callback + Executor 完整闭环
开发语言·c++·算法·ros2
400分1 小时前
具身智能系列之从零到「机械臂会放试管」:π0.5 VLA 真机部署完全指南【第一节】
算法
小宋10211 小时前
一套服务托管多个 LoRA:适配器加载、租户隔离与热切换实战
大数据·人工智能·算法
Rosanci1 小时前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex