模板 Spfa判負環

2021-10-02 15:27:50 字數 1031 閱讀 1048

給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環, 邊權可能為負數。

請你判斷圖中是否存在負權迴路。

輸入格式

第一行包含整數n和m。

接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。

輸出格式

如果圖中存在負權迴路,則輸出「yes」,否則輸出「no」。

資料範圍

1≤n≤2000

,1≤m≤10000

,圖中涉及邊長絕對值均不超過10000。

輸入樣例:33

12-1

2343

1-4輸出樣例:

yes

前言:如果你不了解spfa演算法,請先看這篇文章:好了,spfa判負環的原理十分簡單,思路就是在spfa的基礎上加乙個cnt陣列來判斷乙個點是否形成負環

推薦看的blog:

具體**如下:

#include

using

namespace std;

const

int n=

2010

,m=10010

;int n,m,h[n]

,w[m]

,e[m]

,ne[m]

,idx;

int dist[n]

,cnt[n]

;bool st[n]

;void

add(

int a,

int b,

int c)

bool

spfa()

while

(!q.

empty()

)}}}

return

false;}

intmain()

if(spfa()

) cout<<

"yes"

;else cout<<

"no"

;return0;

}

spfa(判負環變形)

題目鏈結 題意 n種貨幣,m種交換 s v 邊 u v r1 c1 r2 c2表示u貨幣換成v貨幣需要c1手續費和交換率r1,v換u為c2,r2.轉換公式 val v val u c1 r1 初始有s貨幣v枚。問能否通過一系列的交換,可以獲得比初始更多的錢?解法 include include in...

模板 負環(spfa)

暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,表示a b有一條權值為w的邊 若w 0則為單向,否則雙向 輸出格式 共t行。對於每組資料,...

TT 的美夢(SPFA判負環)

這一晚,tt 做了個美夢!在夢中,tt 的願望成真了,他成為了喵星的統領!喵星上有 n 個商業城市,編號 1 n,其中 1 號城市是 tt 所在的城市,即首都。喵星上共有 m 條有向道路供商業城市相互往來。但是隨著喵星商業的日漸繁榮,有些道路變得非常擁擠。正在 tt 為之苦惱之時,他的魔法小貓咪提出...