Pagini recente » Cod sursa (job #1826185) | Cod sursa (job #2573226) | Cod sursa (job #3175111) | Cod sursa (job #1796499) | Cod sursa (job #2305029)
#include <bits/stdc++.h>
#define int_pair std::pair <int, int>
struct triple {
triple(int val = 0, int_pair edge = {0, 0}, int rang = 0) {
this->val = val;
this->rang = rang;
this->edge = edge;
} int val, rang; int_pair edge;
bool operator < (const triple& other) const {
return val > other.val;
}
};
#define MAXN 1025
#define inf 1000000005
int N, M, K;
std::vector <int_pair> ADC[MAXN];
inline void AddEdge(int x, int y, int w) {
ADC[x].push_back({y, w});
}
std::ifstream In("pitici.in");
std::ofstream Out("pitici.out");
int DP[MAXN][MAXN];
bool Seen[MAXN];
void DFS_feat_Dijkstra_and_the_DynamicGang_NewSingle_XDepression_Gonna_Give_it_to_Ya_REMIXED(int vertex = 1) {
Seen[vertex] = 1;
for (int i=0; i<K; ++i)
DP[vertex][i] = inf;
if (vertex == N) {
DP[vertex][0] = 0;
return;
}
std::priority_queue <triple> PQ;
for (auto Edge:ADC[vertex]) {
if (!Seen[Edge.first]) DFS_feat_Dijkstra_and_the_DynamicGang_NewSingle_XDepression_Gonna_Give_it_to_Ya_REMIXED(Edge.first);
PQ.push(triple(DP[Edge.first][0] + Edge.second, Edge));
}
triple Top;
for (int i=0; i<K && !PQ.empty(); ++i) {
Top = PQ.top();
PQ.pop();
DP[vertex][i] = Top.val;
PQ.push(triple(DP[Top.edge.first][Top.rang+1] + Top.edge.second, Top.edge, Top.rang+1));
}
}
void Citire() {
In >> N >> M >> K;
for (int i=0, x, y, w; i<M; ++i)
In >> x >> y >> w, AddEdge(x, y, w);
}
void Rezolvare() {
DFS_feat_Dijkstra_and_the_DynamicGang_NewSingle_XDepression_Gonna_Give_it_to_Ya_REMIXED();
for (int i=0; i<K; ++i)
Out << DP[1][i] << ' ' ;
}
int main()
{
Citire();
Rezolvare();
return 0;
}