#include <bits/stdc++.h>
using namespace std;
#define fwd(i, a, n) for (int i = (a); i < (n); i ++)
#define rep(i, n) fwd(i, 0, n)
#define all(X) begin(X), end(X)
#define sz(X) ((int)X.size())
#define st first
#define nd second
#define pii pair<int, int>
#define vi vector<int>
#define ll long long
#ifdef LOC
auto &operator << (auto &out, pair<auto, auto> a) {
return out << "(" << a.st << ", " << a.nd << ")";
}
auto &operator << (auto &out, auto a) {
out << "{";
for (auto b : a)
out << b << ", ";
return out << "}";
}
void dump(auto... x) { ((cerr << x << ", "), ...) << '\n'; }
#define debug(x...) cerr << "[" #x "]: ", dump(x)
#else
#define debug(...) 0
#endif
const ll inf = 1e18;
int32_t main() {
ios_base::sync_with_stdio(0), cin.tie(0);
int n, k, m;
cin >> n >> k >> m;
vector<vector<pii> > z(k);
rep(i, n) {
int t, w, c;
cin >> t >> w >> c;
t --;
if (w == m)
w = 0;
z[t].push_back({w, c});
}
vector<ll> dp(m, inf);
vector<ll> tmp(m);
dp[0] = 0;
rep(t, k) {
fill(all(tmp), inf);
for (auto [w, c] : z[t]) {
int p = w;
rep(i, m) {
if (dp[i] + c < tmp[p]) {
tmp[p] = dp[i] + c;
}
p ++;
if (p == m)
p = 0;
}
}
swap(tmp, dp);
}
dp[0] = 0;
vi vis(m, 0);
rep(i, m) {
int p = -1;
rep(j, m) {
if (!vis[j] && dp[j] != inf && (p == -1 || dp[j] < dp[p])) {
p = j;
}
}
if (p == -1)
break;
vis[p] = 1;
int pd = p;
rep(j, m) {
if (dp[p] + dp[j] < dp[pd])
dp[pd] = dp[p] + dp[j];
pd ++;
if (pd == m)
pd = 0;
}
}
rep(i, m) {
if (dp[i] == inf)
cout << "-1\n";
else
cout << dp[i] << '\n';
}
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include <bits/stdc++.h> using namespace std; #define fwd(i, a, n) for (int i = (a); i < (n); i ++) #define rep(i, n) fwd(i, 0, n) #define all(X) begin(X), end(X) #define sz(X) ((int)X.size()) #define st first #define nd second #define pii pair<int, int> #define vi vector<int> #define ll long long #ifdef LOC auto &operator << (auto &out, pair<auto, auto> a) { return out << "(" << a.st << ", " << a.nd << ")"; } auto &operator << (auto &out, auto a) { out << "{"; for (auto b : a) out << b << ", "; return out << "}"; } void dump(auto... x) { ((cerr << x << ", "), ...) << '\n'; } #define debug(x...) cerr << "[" #x "]: ", dump(x) #else #define debug(...) 0 #endif const ll inf = 1e18; int32_t main() { ios_base::sync_with_stdio(0), cin.tie(0); int n, k, m; cin >> n >> k >> m; vector<vector<pii> > z(k); rep(i, n) { int t, w, c; cin >> t >> w >> c; t --; if (w == m) w = 0; z[t].push_back({w, c}); } vector<ll> dp(m, inf); vector<ll> tmp(m); dp[0] = 0; rep(t, k) { fill(all(tmp), inf); for (auto [w, c] : z[t]) { int p = w; rep(i, m) { if (dp[i] + c < tmp[p]) { tmp[p] = dp[i] + c; } p ++; if (p == m) p = 0; } } swap(tmp, dp); } dp[0] = 0; vi vis(m, 0); rep(i, m) { int p = -1; rep(j, m) { if (!vis[j] && dp[j] != inf && (p == -1 || dp[j] < dp[p])) { p = j; } } if (p == -1) break; vis[p] = 1; int pd = p; rep(j, m) { if (dp[p] + dp[j] < dp[pd]) dp[pd] = dp[p] + dp[j]; pd ++; if (pd == m) pd = 0; } } rep(i, m) { if (dp[i] == inf) cout << "-1\n"; else cout << dp[i] << '\n'; } return 0; } |
English