Pagini recente » Cod sursa (job #330106) | Cod sursa (job #912064) | Cod sursa (job #1996644) | Cod sursa (job #1128039) | Cod sursa (job #161466)
Cod sursa(job #161466)
/*
ID: victorsb
TASK: cowjog
LANG: C++
*/
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 1024
#define Kmax 105
#define INF 0x3f3f3f3f
#define pb push_back
#define sz(a) (int)((a).size())
int n, m, k;
int D[Nmax][Kmax];
vector<int> lv[Nmax];
int cost[Nmax][Nmax];
int ind[Nmax];
void citire()
{
int i, a, b, c;
scanf("%d %d %d\n", &n, &m, &k);
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d\n", &a, &b, &c);
swap(a, b);
lv[b].pb(a);
cost[b][a] = c;
}
}
void solve()
{
int i, j, pas, best;
memset(D[n], 0x3f, sizeof(D[n]));
D[n][1] = 0;
for (i = n - 1; i >= 1; --i)
{
for (j = 0; j < sz(lv[i]); ++j)
ind[lv[i][j]] = 1;
for (pas = 1; pas <= k; ++pas)
{
D[i][pas] = INF;
best = -1;
for (j = 0; j < sz(lv[i]); ++j)
if (D[i][pas] > D[lv[i][j]][ind[lv[i][j]]] + cost[i][lv[i][j]])
{
D[i][pas] = D[lv[i][j]][ind[lv[i][j]]] + cost[i][lv[i][j]];
best = lv[i][j];
}
if (best > 0)
++ind[best];
}
}
for (i = 1; i <= k; ++i)
if (D[1][i] < INF)
printf("%d\n", D[1][i]);
else
printf("-1\n");
}
int main()
{
freopen("cowjog.in", "r", stdin);
freopen("cowjog.out", "w", stdout);
citire();
solve();
return 0;
}