給定多組資料 每組資料給定n種貨幣 再給定m種貨幣之間的匯率 求是否存在乙個環 使得匯率的積》1 即盈利
將每一中貨幣看作點 匯率看作邊權
我們可以利用spfa進行判斷環 當乙個點進行的鬆弛操作》=n時,即出現了乙個環
這裡要用最長路 將括號裡的加號改為乘號 可以證明如果環上所有邊
的權值之積大於1,那麼一定可以用spfa判定出有向圖中存在環
因為如果小於1的話肯定越乘越小啊
無法出現盈利的情況有:
1 沒有環 即最後沒法回到原來的貨幣
2 有環 但是小於1
(有可能你要問程式裡並沒有判斷是不是》1啊 你可以想想這是最長路)
1 #include 2 #include 3 #include 4 #include 5 #include 6ac codeusing
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 }
洛谷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的有序...