Pagini recente » Cod sursa (job #2701669) | Cod sursa (job #101236) | Cod sursa (job #1222000) | Cod sursa (job #131605) | Cod sursa (job #34699)
Cod sursa(job #34699)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
#define MAX_N 1024
#define FIN "pitici.in"
#define FOUT "pitici.out"
#define mp make_pair
#define pb push_back
#define f first
#define s second
int N, M, K, pos[MAX_N], add[MAX_N]; char U[MAX_N];
vector < pair<short, int> > G[MAX_N];
vector < int > C[MAX_N];
priority_queue < pair<int, short> > H;
void DFS(int n)
{
int i, t;
vector < pair<short, int> >::iterator it;
U[n] = 1;
for (it = G[n].begin(); it != G[n].end(); it++)
if (!U[it->f]) DFS(it->f);
while (!H.empty()) H.pop();
for (it = G[n].begin(); it != G[n].end(); it++)
{
pos[it->f] = 0; add[it->f] = it->s;
H.push(mp(-(C[it->f][0]+it->s), it->f));
}
C[n].reserve(K);
for (i = 0; i < K && !H.empty(); i++)
{
t = H.top().s;
C[n].pb(-H.top().f); H.pop();
if (++pos[t] < C[t].size())
H.push(mp(-(C[t][pos[t]]+add[t]), t));
}
}
int main(void)
{
int i, a, b, c;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
for (scanf("%d %d %d", &N, &M, &K); M; M--)
{
scanf("%d %d %d", &a, &b, &c);
G[a].pb(mp(b, c));
}
C[N].pb(0);
DFS(1);
for (i = 0; i < K; i++)
printf("%d ", C[1][i]);
printf("\n");
return 0;
}