判斷負環 bzoj 2019

2022-05-13 17:31:55 字數 1412 閱讀 7069

奶 牛們沒錢了,正在找工作。農夫約翰知道後,希望奶牛們四處轉轉,碰碰運氣。而且他還加了一條要求:一頭牛在乙個城市最多只能賺d(1 <= d <= 1,000)美元,然後它必須到另一座城市工作。當然,它可以在別處工作一陣後又回來原來的城市再最多賺d美元。而且這樣往往返返的次數沒有限制。 城市間有p (1 <= p <= 150)條單向路徑連線,共有c(2 <= c <= 220)座城市,編號1..c. 貝希當前處在城市s (1 <= s <= c)。路徑 i 從城市a_i 到城市b_i (1 <= a_i <= c; 1 <= b_i <= c),在路徑上行走不用花任何費用。為了幫助貝希,約翰讓它使用他的私人飛機服務。這項服務有f條(1 <= f <= 350)航線,每條航線是從城市j_i飛到另一座城市k_i (1 <=j_i <= c; 1 <= k_i <= c),費用是t_i (1 <= t_i <= 50,000)美元。如果貝希手中如果沒有現錢,可以用以後賺的錢來付機票錢。貝希可以選擇任何時候,在任何城市退休。如果在工作時間上不作限制,貝希總 共可以賺多少錢呢? 如果賺的錢也不會出現限制,就輸出-1。

第1行: 5個空格分開的整數 d, p, c, f, s

第2..p+1行: 第 i+1行包含2個空格分開的整數,表示一條從a_i 到 b_i的單向路徑

第p+2..p+f+1行: 第p+i 包含3個空格分開的整數,表示一條從j_i到k_i的單向航線,費用為t_i

第1行: 在上述規則下的最多可賺的錢數。

100 3 5 2 1

1 52 3

1 45 2 150

2 5 120

250樣例說明:貝希可以從城市 1 到 5 再到 2 ,最後到 3, 總共賺 4*100 - 150 = 250 美元。

silver

#include#include#include#include#include#include#include#include#include#include#include#define inf 100000000

using namespace std;

vectore[250],w[250];

int d,p,c,f,s;

int dist[250],vis[250];

bool flag;

void dfs(int u)

dist[v]=dist[u]+w[u][i]+d;

dfs(v);

if(flag)

return ;}}

vis[u]=0;

}void spfa()

int main()

for(int i=1;i<=f;i++)

spfa();

if(flag)

printf("-1\n");

else

printf("%d\n",ans);

return 0;

}

F Wormholes spfa判斷負環

傳送門 題意 艾高比較差qaq。意思是農夫發現了蟲洞,他發現從乙個點到另乙個點會花費一些時間,存在一些點到點可以到退時間。問farm是否可以通過乙個迴路回到過去。就是問是否存在一條負權的邊。思路 spfa判斷負環模板即可,要注意,有些蟲洞是可以來回的,所以一條邊要新增兩次 題目中給出,是雙向路徑 既...

SPFA判斷負環

說明一下,這個例題用下面的方法是過不了的,只能過掉25分因為資料加強了,而我不會寫bfs版spfa判負環 但是我覺得會dfs版的就行了,反正對於隨機資料dfs版的絕對吊打bfs版的 只不過這道題的資料不是隨機的,是有人惡意新增的 我們利用dfs強行進行鬆弛操作 我感覺已經不能叫他spfa了 如果在一...

關於spfa 判斷負環

判斷給定的有向圖中是否存在負環。利用spfa 演算法判斷負環有兩種方法 1 spfa 的dfs 形式,判斷條件是存在一點在一條路徑上出現多次。2 spfa 的bfs 形式,判斷條件是存在一點入隊次數大於總頂點數。如下 法 1 spfa 的dfs 形式 include include include ...