Pagini recente » Cod sursa (job #183488) | Cod sursa (job #2132633) | Cod sursa (job #2989354) | Cod sursa (job #537854) | Cod sursa (job #161515)
Cod sursa(job #161515)
/*
ID: victorsb
PROG: cowjog
LANG: C++
*/
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 1024
#define Mmax 10015
#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];
vector<int> cost[Nmax];
int ind[Mmax];
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);
lv[b].pb(a);
cost[b].pb(c);
}
}
void solve()
{
int i, j, pas, best;
memset(D, 0x3f, sizeof(D));
D[1][1] = 0;
for (i = 2; i <= n; ++i)
{
for (j = 0; j < sz(lv[i]); ++j)
ind[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[j]] + cost[i][j])
{
D[i][pas] = D[lv[i][j]][ind[j]] + cost[i][j];
best = j;
}
if (best >= 0)
++ind[best];
}
}
for (i = 1; i <= k; ++i)
if (D[n][i] < INF)
printf("%d ", D[n][i]);
else
printf("-1\n");
}
int main()
{
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
citire();
solve();
return 0;
}