Pagini recente » Cod sursa (job #2663539) | Cod sursa (job #1666244) | Cod sursa (job #132860) | Cod sursa (job #4201) | Cod sursa (job #2953436)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pitici.in");
ofstream fout("pitici.out");
const int NMAX = 1019;
int n, m, k;
vector<pair<int, int>> adjr[NMAX + 1], adj[NMAX + 1];
vector<int> topoSort;
multiset<int> dist[NMAX + 1];
bool vis[NMAX + 1];
void dfs(int u = 1) {
vis[u] = 1;
for(const auto &edge: adj[u]) {
if(!vis[edge.first]) {
dfs(edge.first);
}
}
topoSort.push_back(u);
}
int main() {
ios_base :: sync_with_stdio(false);
fin >> n >> m >> k;
for(int i = 1; i <= m; i++) {
int u, v, w;
fin >> u >> v >> w;
adj[u].push_back({v, w});
adjr[v].push_back({u, w});
}
dfs();
dist[n].insert(0);
for(const auto &u: topoSort) {
for(const auto &edge: adjr[u]) {
// cout << u << " -> " << edge.first << '\n';
for(auto it = dist[u].begin(); it != dist[u].end(); it++) {
dist[edge.first].insert((*it) + edge.second);
if((int) dist[edge.first].size() > k) {
auto End = dist[edge.first].end(); End--;
int val = (*End);
dist[edge.first].erase(End);
if(val == (*it) + edge.second) {
break;
}
}
}
}
}
for(auto it = dist[1].begin(); it != dist[1].end(); it++) {
fout << (*it) << " ";
}
fin.close();
fout.close();
return 0;
}