#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio();
int N, K, M;
cin >> N >> K >> M;
vector<vector<pair<int, int>>> Z(K);
for (int i = 0; i < N; ++i) {
int k, m, c;
cin >> k >> m >> c;
Z[k - 1].push_back({m, c});
}
vector<long long> A(M, -1);
A[0] = 0;
if (any_of(Z.begin(), Z.end(), [](const vector<pair<int, int>>& z) { return z.empty(); })) {
for (int i = 0; i < M; ++i)
cout << A[i] << endl;
} else {
vector<long long> D(M, -1);
D[0]=0;
int constans = 1;
int ile=0;
while (constans < 2) {
constans++;
ile++;
for (int k = 0; k < K; ++k) {
vector<long long> E(M, -1);
for (auto z : Z[k]) {
for (int m = 0; m < M; ++m) {
if (D[m] >= 0) {
int w = (m + z.first) % M;
long long cost = D[m] + z.second;
if (E[w] < 0 || cost < E[w]) {
E[w] = cost;
}
}
}
}
D = E;
}
for (int m = 0; m<M; ++m) {
if (D[m]>=0) {
long long cost = D[m];
int i=(2*m)%M,k=2;
while (i != m) {
//cout << i << ", ";
if (D[i]==-1 || cost*k<D[i])
D[i]=cost*k;
k++;
i=(i+m)%M;
}
break;
}
}
//cout << "-------------\n";
for (int m = 0; m < M; ++m) {
if (D[m] >= 0 && (A[m] == -1 || D[m] < A[m])) {
A[m] = D[m];
//cout << ile << ":" << m << " " << A[m] << endl;
constans = 0;
}
}
}
for (int i = 0; i < M; ++i) {
cout << A[i] << endl;
}
}
return 0;
}
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { ios_base::sync_with_stdio(); int N, K, M; cin >> N >> K >> M; vector<vector<pair<int, int>>> Z(K); for (int i = 0; i < N; ++i) { int k, m, c; cin >> k >> m >> c; Z[k - 1].push_back({m, c}); } vector<long long> A(M, -1); A[0] = 0; if (any_of(Z.begin(), Z.end(), [](const vector<pair<int, int>>& z) { return z.empty(); })) { for (int i = 0; i < M; ++i) cout << A[i] << endl; } else { vector<long long> D(M, -1); D[0]=0; int constans = 1; int ile=0; while (constans < 2) { constans++; ile++; for (int k = 0; k < K; ++k) { vector<long long> E(M, -1); for (auto z : Z[k]) { for (int m = 0; m < M; ++m) { if (D[m] >= 0) { int w = (m + z.first) % M; long long cost = D[m] + z.second; if (E[w] < 0 || cost < E[w]) { E[w] = cost; } } } } D = E; } for (int m = 0; m<M; ++m) { if (D[m]>=0) { long long cost = D[m]; int i=(2*m)%M,k=2; while (i != m) { //cout << i << ", "; if (D[i]==-1 || cost*k<D[i]) D[i]=cost*k; k++; i=(i+m)%M; } break; } } //cout << "-------------\n"; for (int m = 0; m < M; ++m) { if (D[m] >= 0 && (A[m] == -1 || D[m] < A[m])) { A[m] = D[m]; //cout << ile << ":" << m << " " << A[m] << endl; constans = 0; } } } for (int i = 0; i < M; ++i) { cout << A[i] << endl; } } return 0; } |
English