Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <limits.h>
- #include <vector>
- using namespace std;
- struct edge{
- int from;
- int to;
- int weight;
- };
- int main() {
- int n, m, k, start, finish;
- cin >> n >> m >> k >> start >> finish;
- vector <edge> g(m);
- for (int i = 0; i < m; i++) {
- cin >> g[i].from >> g[i].to >> g[i].weight;
- g[i].to -= 1;
- g[i].from -= 1;
- }
- vector<vector<int>> d(k+1, vector<int> (n, INT_MAX));
- d[0][start - 1] = 0;
- for (int i = 0; i < k; i++) {
- d[i + 1] = d[i];
- for (int j = 0; j < m; j++) {
- if (d[i][g[j].from] < INT_MAX)
- d[i + 1][g[j].to] = min(d[i+1][g[j].to], d[i][g[j].from] + g[j].weight);
- }
- }
- if (d[k][finish - 1] == INT_MAX)
- cout << -1;
- else
- cout << d[k][finish - 1];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement