Arbitrage 判最大環

2021-10-08 11:15:43 字數 1589 閱讀 2739

input

套利是指利用貨幣匯率的差異,將一種貨幣的乙個單位轉換為同一貨幣的多個單位。例如,假設1美元買0.5英鎊,1英鎊買10.0法國法郎,1法國法郎買0.21美元。然後,通過兌換貨幣,聰明的交易者可以從1美元開始,購買0.5 * 10.0 * 0.21 = 1.05美元,獲得5%的利潤。

您的工作是編寫乙個程式,以貨幣匯率列表作為輸入,然後確定是否可能進行套利。output輸入將包含乙個或多個測試用例。每個測試用例的第一行有乙個整數n (1<=n<=30),表示不同貨幣的數量。接下來的n行每一行都包含一種貨幣的名稱。名稱中不會出現空格。下一行包含乙個整數m,表示接下來的表的長度。最後的m行分別包含源貨幣的名稱ci、表示從ci到cj的匯率的實數rij和目標貨幣的名稱cj。沒有出現在**中的交易是不可能的。

測試用例通過空行彼此分開。對於n,輸入以0(0)的值結束。

sample input

3usdollar

britishpound

frenchfranc

3usdollar 0.5 britishpound

britishpound 10.0 frenchfranc

frenchfranc 0.21 usdollar

3usdollar

britishpound

frenchfranc

6usdollar 0.5 britishpound

usdollar 4.9 frenchfranc

britishpound 10.0 frenchfranc

britishpound 1.99 usdollar

frenchfranc 0.09 britishpound

frenchfranc 0.19 usdollar

0sample output

case 1: yes

case 2: no

思路:判最大環

bellmen-ford,spfa,floyd均可,這裡用floyd演算法

code

#include

#include

#include

#include

#include

#include

using

namespace std;

mapint>ma;

double dis[65]

[65];

int cnt =0;

intmain()

int m;

cin>>m;

for(

int i=

1;i<=m;i++

)for

(int k=

1;k<=n;k++

)for

(int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++

)int flag =0;

for(

int i=

1;i<=n;i++)}

if(!flag)

printf

("case %d: no\n"

,++cnt);}

}

hdu 3367 最大生成樹 判環

不能最大生成樹 最大的一條邊,但是為什麼呢?if fx fy 如果兩棵樹上不是都有回環,那麼可以合併,fx掛在fy上,如果其中乙個有環,fy標記為有環 if fx fy circle x circle y 如果兩棵樹上都沒有回環,那麼x和y還能合併,環數變為1 include includeusin...

單鏈表判環判交問題

摘要 有乙個單鏈表,其中可能有乙個環,也就是某個節點的next指向的是鍊錶中在它之前的節點,這樣在鍊錶的尾部形成一環。1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?擴充套件 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點。有乙個單鏈表,其中可能有乙個環,也就是某...

判環的方法

spfao n n n為點數 拓撲排序可以有重邊 o n tarjan實質上也是拓撲排序,這個演算法還有縮點操作 dfs 給出一組不等式,判斷這組不等式是否矛盾,點的個數 100000 include include define n 200010 using namespace std bool ...