From b48eab7be4655609aace345ca3d399011d8830dc Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Thu, 6 Oct 2022 21:05:42 +0800 Subject: [PATCH] D - Fox And Jumping https://codeforces.com/contest/510/submission/174856374 --- Codeforces/510/D/D.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Codeforces/510/D/D.cpp diff --git a/Codeforces/510/D/D.cpp b/Codeforces/510/D/D.cpp new file mode 100644 index 00000000..f8f6fba8 --- /dev/null +++ b/Codeforces/510/D/D.cpp @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +const int N = 305; +const int INF = 0x3f3f3f3f; + +int n, l[N], c[N]; +std::priority_queue, std::vector>, std::greater<>> q; +std::unordered_map vis; +std::unordered_map dist; + +int main() { + std::ios::sync_with_stdio(false); + cin.tie(nullptr); + + cin >> n; + + for (int i = 1; i <= n; i++) { + cin >> l[i]; + } + + for (int i = 1; i <= n; i++) { + cin >> c[i]; + } + + q.emplace(0, 0); + dist[0] = 0; + + while (!q.empty()) { + int u = q.top().second; + q.pop(); + + if (vis.count(u)) continue; + vis[u] = true; + + for (int i = 1; i <= n; i++) { + int v = std::__gcd(u, l[i]); + + if (!dist.count(v)) dist[v] = INF; + if (dist[v] > dist[u] + c[i]) { + dist[v] = dist[u] + c[i]; + q.emplace(dist[v], v); + } + } + } + + cout << (dist.count(1) ? dist[1] : -1) << endl; + + return 0; +}