POJ 1860(spfa 判斷正環)

2021-09-01 13:18:40 字數 1020 閱讀 9411

題意:我們的城市有幾個貨幣兌換點。讓我們假設每乙個點都只能兌換專門的兩種貨幣。可以有幾個點,專門從事相同貨幣兌換。每個點都有自己的匯率,外匯匯率的a到b是b的數量你1a。同時各交換點有一些佣金,你要為你的交換操作的總和。在**貨幣中總是收取佣金。 例如,如果你想換100美元到俄羅斯盧布兌換點,那裡的匯率是29.75,而佣金是0.39,你會得到(100 - 0.39)×29.75=2963.3975盧布。 你肯定知道在我們的城市裡你可以處理不同的貨幣。讓每一種貨幣都用唯一的乙個小於n的整數表示。然後每個交換點,可以用6個整數表描述:整數a和b表示兩種貨幣,a到b的匯率,a到b的佣金,b到a的匯率,b到a的佣金。 nick有一些錢在貨幣s,他希望能通過一些操作(在不同的兌換點兌換),增加他的資本。當然,他想在最後手中的錢仍然是s。幫他解答這個難題,看他能不能完成這個願望。 

思路:如果從乙個點出發回到這個點後金錢增加,那麼必定存在正環,所以用鄰接矩陣儲存,用spfa查出dis[sta]>v的情況。

#include#include#include#includeusing namespace std;

const int maxn=1005;

int n,m,s;

double v;

double rate[maxn][maxn],mon[maxn][maxn],dis[maxn];

bool spfa(int sta)

if(!vis[i])}}

}return 0;

}int main()

else

rate[i][j]=1;

mon[i][j]=0;}}

//cout<>a>>b>>rab>>mab>>rba>>mba;

rate[a][b]=rab;

rate[b][a]=rba;

mon[a][b]=mab;

mon[b][a]=mba;

}if(spfa(s))

else

cout<<"no"<}

return 0;

}

POJ 1860判斷正環

題目鏈結 題意 有n種型別的貨幣,m個城市可以兌換兩種貨幣,乙個人手上有v塊s型別的錢,要求判斷是否可以經過若干次兌換後這個人手上的s型別的錢增加了。思路 對於每種貨幣,建立乙個點,兩種貨幣可以交換,則這兩個點之間有一條邊,經過若干次兌換後要回到s型別的錢,則一定存在環,而錢要增加,則需要存在正權環...

hdu 1317 spfa 演算法 判斷正環

題意 最多有100個房間,每個房間裡有正能量和負能量,然後你的初始能量為100從1開始走,走到n能不能能量為正,走到每乙個房間的能量必須大於 0,輸入輸出的意思是 乙個有n個房間,後面的n行表示 第乙個表示 房間的權,第二個 k 表示他可以連到幾個房間,後面的 k個數表示第i個房間與他相連,權為p ...

SPFA判斷負環

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