奶 牛們沒錢了,正在找工作。農夫約翰知道後,希望奶牛們四處轉轉,碰碰運氣。而且他還加了一條要求:一頭牛在乙個城市最多只能賺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 100000000using 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 ...