#include <iostream>
#include <numeric>
#include <vector>
int main() {
int n, k, m;
std::cin >> n >> k >> m;
std::vector<std::vector<std::pair<int, int64_t>>> in(k);
for (int i = 0; i < n; ++i) {
int k_i, m_i;
int64_t c_i;
std::cin >> k_i >> m_i >> c_i;
in[k_i - 1].emplace_back(m_i, c_i);
}
std::vector<int64_t> dyn1(m, 1LL << 60);
dyn1[0] = 0;
for (auto &color: in) {
auto prev = std::move(dyn1);
dyn1 = std::vector<int64_t>(m, 1LL << 60);
for (auto [m_i, c_i]: color) {
for (int i = 0; i < m; ++i) {
if (dyn1[(i + m_i) % m] > c_i + prev[i]) {
dyn1[(i + m_i) % m] = c_i + prev[i];
}
}
}
}
std::vector<int64_t> dyn2(m, 1LL << 60);
dyn2[0] = 0;
for (int i = 1; i < m; ++i) {
bool improved;
do {
improved = false;
for (int j = 0; j < m; ++j) {
if (dyn2[(i + j) % m] > dyn1[i] + dyn2[j]) {
dyn2[(i + j) % m] = dyn1[i] + dyn2[j];
improved = true;
}
}
} while (improved);
}
for (auto v: dyn2) {
std::cout << ((v < (1LL << 60)) ? v : -1) << "\n";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <iostream> #include <numeric> #include <vector> int main() { int n, k, m; std::cin >> n >> k >> m; std::vector<std::vector<std::pair<int, int64_t>>> in(k); for (int i = 0; i < n; ++i) { int k_i, m_i; int64_t c_i; std::cin >> k_i >> m_i >> c_i; in[k_i - 1].emplace_back(m_i, c_i); } std::vector<int64_t> dyn1(m, 1LL << 60); dyn1[0] = 0; for (auto &color: in) { auto prev = std::move(dyn1); dyn1 = std::vector<int64_t>(m, 1LL << 60); for (auto [m_i, c_i]: color) { for (int i = 0; i < m; ++i) { if (dyn1[(i + m_i) % m] > c_i + prev[i]) { dyn1[(i + m_i) % m] = c_i + prev[i]; } } } } std::vector<int64_t> dyn2(m, 1LL << 60); dyn2[0] = 0; for (int i = 1; i < m; ++i) { bool improved; do { improved = false; for (int j = 0; j < m; ++j) { if (dyn2[(i + j) % m] > dyn1[i] + dyn2[j]) { dyn2[(i + j) % m] = dyn1[i] + dyn2[j]; improved = true; } } } while (improved); } for (auto v: dyn2) { std::cout << ((v < (1LL << 60)) ? v : -1) << "\n"; } } |
English