// 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=7005; const ll inff=1ll<<60; int n,K,m,vis[N]; vector<pair<int,int> >vec[N]; ll f[N],g[N],ans[N]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>K>>m; for(int i=1;i<=n;i++){ int k,w,c; cin>>k>>w>>c; vec[k].emplace_back(w,c); } for(int i=1;i<m;i++) f[i]=inff; for(int i=1;i<=K;i++){ for(int j=0;j<m;j++) g[j]=f[j],f[j]=inff; for(pair<int,int> k:vec[i]){ int x=k.first%m,y=k.second; for(int j=0,w=x;j<m;j++,w=(w==m-1?0:w+1)) if(g[j]!=inff) f[w]=min(f[w],g[j]+y); } } for(int i=1;i<m;i++) ans[i]=inff; while(1){ int p=-1; for(int i=0;i<m;i++) if(!vis[i]&&(p==-1||ans[i]<ans[p])) p=i; if(p==-1) break; vis[p]=1; for(int i=0,q=p;i<m;i++,q=(q==m-1?0:q+1)) ans[q]=min(ans[q],ans[p]+f[i]); } for(int i=0;i<m;i++) if(ans[i]==inff) ans[i]=-1; for(int i=0;i<m;i++) cout<<ans[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 | // 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=7005; const ll inff=1ll<<60; int n,K,m,vis[N]; vector<pair<int,int> >vec[N]; ll f[N],g[N],ans[N]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>K>>m; for(int i=1;i<=n;i++){ int k,w,c; cin>>k>>w>>c; vec[k].emplace_back(w,c); } for(int i=1;i<m;i++) f[i]=inff; for(int i=1;i<=K;i++){ for(int j=0;j<m;j++) g[j]=f[j],f[j]=inff; for(pair<int,int> k:vec[i]){ int x=k.first%m,y=k.second; for(int j=0,w=x;j<m;j++,w=(w==m-1?0:w+1)) if(g[j]!=inff) f[w]=min(f[w],g[j]+y); } } for(int i=1;i<m;i++) ans[i]=inff; while(1){ int p=-1; for(int i=0;i<m;i++) if(!vis[i]&&(p==-1||ans[i]<ans[p])) p=i; if(p==-1) break; vis[p]=1; for(int i=0,q=p;i<m;i++,q=(q==m-1?0:q+1)) ans[q]=min(ans[q],ans[p]+f[i]); } for(int i=0;i<m;i++) if(ans[i]==inff) ans[i]=-1; for(int i=0;i<m;i++) cout<<ans[i]<<'\n'; return 0; } |