Pagini recente » Cod sursa (job #1978632) | Cod sursa (job #2069550) | Cod sursa (job #1919238) | Cod sursa (job #1606732) | Cod sursa (job #372732)
Cod sursa(job #372732)
#include <cstdio>
#include <queue>
using namespace std;
#define PII pair<int, int>
#define mp make_pair
#define pb push_back
#define NMax 1024
#define INF 999999999
#define f first
#define s second
int N, M, K, calc[NMax];
priority_queue< PII, vector<PII>, greater<PII> > Q;
vector< PII > G[NMax];
int dst[NMax][NMax], dep[NMax], cost[NMax];
void df(int n)
{
int i, sz, vec, nd;
if (calc[n] == 1)
return ;
for (sz = G[n].size(), i = 0; i < sz; ++i)
df(G[n][i].f);
while (!Q.empty())
Q.pop();
for (i = 0; i < sz; ++i)
{
vec = G[n][i].f;
dep[vec] = 1;
cost[vec] = G[n][i].s;
Q.push( mp(cost[vec] + dst[vec][1], vec) );
}
int nr = 0;
for (i = 1; i <= K && !Q.empty(); ++i)
{
PII root = Q.top();
Q.pop();
if (root.f >= INF)
break;
dst[n][++nr] = root.f;
++dep[root.s];
if (dep[root.s] <= K)
{
nd = root.s;
Q.push( mp(cost[nd] + dst[nd][dep[nd]], nd) );
}
}
calc[n] = 1;
}
int main()
{
int i, j, u, v, c;
freopen("pitici.in", "r", stdin);
freopen("pitici.out", "w", stdout);
scanf("%d %d %d", &N, &M, &K);
for (; M; --M)
{
scanf("%d %d %d", &u, &v, &c);
G[u].pb( mp(v, c) );
}
for (i = 1; i <= N; ++i)
for (j = 1; j <= K; ++j)
dst[i][j] = INF;
dst[N][1] = 0;
df(1);
for (i = 1; i <= K; ++i)
printf("%d ", dst[1][i]);
printf("\n");
return 0;
}