洛谷P1931 套利

2022-05-26 03:42:09 字數 1032 閱讀 1405

給定多組資料 每組資料給定n種貨幣 再給定m種貨幣之間的匯率 求是否存在乙個環 使得匯率的積》1 即盈利

將每一中貨幣看作點 匯率看作邊權

我們可以利用spfa進行判斷環 當乙個點進行的鬆弛操作》=n時,即出現了乙個環

這裡要用最長路 將括號裡的加號改為乘號 可以證明如果環上所有邊

的權值之積大於1,那麼一定可以用spfa判定出有向圖中存在環

因為如果小於1的話肯定越乘越小啊

無法出現盈利的情況有:

1  沒有環 即最後沒法回到原來的貨幣

2  有環 但是小於1

(有可能你要問程式裡並沒有判斷是不是》1啊 你可以想想這是最長路)

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7int n, m, num, head[100

], ok;

8int vis[100], times[100];9

double dis[100

];10

string

s, ee;

11 mapmp;

12struct

emmm e[10000

];16

void add(int

from, int to, double

dis)

22int spfa(int

s) 45}46

}47}48

49return0;

50}51int

main()

69for (int i = 1;i <= n; i++)

70if

(spfa(i))

75if (f == 0) printf("

case %d: no\n

", ok);

76 cin >>n;77}

78return0;

79 }

ac code

洛谷P3380 二逼平衡樹 (樹套樹)

題目傳送門 題目分析 為什麼我要把這道模板題寫在部落格上呢?因為我想記錄乙個卡常的小技巧。騙訪問量 這題我是考noip之前碼的,寫的是座標線段樹套動態開節點的權值線段樹,雖然空間是o nlog2 n 但實際空間並沒有這麼大。由於在 log n 棵線段樹上同時二叉查詢,時間是o mlog2 n 的,然...

洛谷P3380 模板 二逼平衡樹(樹套樹)

查詢k在區間內的排名 查詢區間內排名為k的值 修改某一位值上的數值 查詢k在區間內的前驅 前驅定義為嚴格小於x,且最大的數,若不存在輸出 2147483647 查詢k在區間內的後繼 後繼定義為嚴格大於x,且最小的數,若不存在輸出2147483647 輸入格式 第一行兩個數 n,m 表示長度為n的有序...

洛谷P3380 模板 二逼平衡樹(樹套樹)

查詢k在區間內的排名 查詢區間內排名為k的值 修改某一位值上的數值 查詢k在區間內的前驅 前驅定義為嚴格小於x,且最大的數,若不存在輸出 2147483647 查詢k在區間內的後繼 後繼定義為嚴格大於x,且最小的數,若不存在輸出2147483647 輸入格式 第一行兩個數 n,m 表示長度為n的有序...