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
95
96
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
struct zel
{
    int m;
    ll c;
};
int main()
{
    cin.tie(0)->sync_with_stdio(0);
    int n,k,m,o;
    cin>>n>>k>>m;
    o=n;
    vector <zel> pus(0);
    vector<vector<zel>> cuk(k,pus);
    for(int i=0;i<n;i++)
    {
        int a,b,c;  //kolor,masa,cena
        cin>>a>>b>>c;
        zel ek;
        ek.m=b;
        ek.c=c;
        cuk[a-1].push_back(ek);
    }
    cout<<0<<"\n";
    vector <ll> moz(m,0);
    for(int i=0;i<k;i++)
    {
        vector <zel> oni=cuk[i];
        if(oni.size()==0)
        {
            for(int j=1;j<m;j++) cout<<"-1 \n";
            return 0;
        }
       int rit=oni.size();
        o=min(o,rit);
        vector <ll> doz(m,0);
        for(int j=0;j<oni.size();j++)
        {
            for(int t=0;t<m;t++)
                if(moz[t]!=0||(i==0&&t==0))
            {
                if(doz[(t+oni[j].m)%m]==0) doz[(t+oni[j].m)%m]=oni[j].c+moz[t];
                else doz[(t+oni[j].m)%m]=min(doz[(t+oni[j].m)%m],oni[j].c+moz[t]);
            }
        }
        moz=doz;
         /*for(int ik=0;ik<m;ik++) cout<<moz[ik]<<" ";
         cout<<"\n";*/
    }
    //o--;
    vector <zel> bog(0),acz(0);
    vector <ll> bied=moz;      //moz stary,bied do zwrotu
    vector <ll> star(m,0);
    for(int i=1;i<m;i++)
    {
        zel kim;
        kim.m=i;
        kim.c=moz[i];
        if(kim.c>0)
            bog.push_back(kim),acz.push_back(kim);
    }
    int bulka=1;
    while(bulka>0)
    {
        star=bied;
        bulka=0;
        for(int i=0;i<bog.size();i++)
            for(int j=0;j<acz.size();j++)
        {
            if(bied[(bog[i].m+acz[j].m)%m]==0||bog[i].c+acz[j].c<bied[(bog[i].m+acz[j].m)%m])
                {bied[(bog[i].m+acz[j].m)%m]=bog[i].c+acz[j].c; bulka=1;}
        }
        if(bulka==0) break;
        bog.clear(),acz.clear();
          for(int i=1;i<m;i++)
    {
        zel kim;
        kim.m=i;
        kim.c=moz[i];
        if(kim.c>0)
            bog.push_back(kim);
        kim.c=bied[i];
        if(kim.c>0&&bied[i]!=star[i])
            acz.push_back(kim);
    }
        o--;
    }
    for(int i=1;i<m;i++)
    {
        if(bied[i]==0) cout<<"-1 \n";
        else cout<<bied[i]<<"\n";
    }
}