Pagini recente » Cod sursa (job #842729) | Cod sursa (job #2066082) | Cod sursa (job #1933381) | Cod sursa (job #2496617) | Cod sursa (job #612819)
Cod sursa(job #612819)
# include <cstdio>
# include <queue>
# include <vector>
using namespace std;
typedef pair <int, int> PR;
const char *FIN = "pitici.in", *FOU = "pitici.out";
const int MAX = 1020;
# define x first
# define y second
bool viz[MAX];
unsigned poz[MAX];
int N, M, K, sum[MAX];
vector <int> L[MAX];
vector <PR> G[MAX];
void dfs (int nod) {
viz[nod] = 1;
for (typeof (G[0].begin ()) it = G[nod].begin (); it != G[nod].end (); ++it) {
if (viz[it -> x]) continue;
dfs (it -> x);
}
priority_queue <PR, vector <PR>, greater <PR> > Q;
for (typeof (G[0].begin ()) it = G[nod].begin (); it != G[nod].end (); ++it) {
poz[it -> x] = 0, sum[it -> x] = it -> y;
if (L[it -> x].empty ()) continue;
Q.push (make_pair (L[it -> x][0] + it -> y, it -> x));
}
L[nod].reserve (K);
for (int i = 0; i < K && Q.size (); ++i) {
int X = Q.top ().y;
L[nod].push_back (Q.top ().x), Q.pop ();
if (++poz[X] < L[X].size ())
Q.push (make_pair (L[X][poz[X]] + sum[X], X));
}
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
scanf ("%d %d %d", &N, &M, &K);
for (int i = 1, x, y, z; i <= M; ++i) {
scanf ("%d %d %d", &x, &y, &z);
G[x].push_back (make_pair (y, z));
}
L[N].push_back (0), dfs (1);
for (vector <int> :: iterator i = L[1].begin (); i != L[1].begin () + K; ++i)
printf ("%d ", *i);
}