Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- class Edge {
- public:
- int begin;
- int end;
- int weight;
- Edge(int begin, int end, int weight) : begin(begin), end(end), weight(weight){
- }
- };
- class Graph {
- private:
- std::vector<Edge> edges;
- int size;
- public:
- Graph (int size, std::vector<Edge> & edges) : edges(edges), size(size) {
- }
- int CountDistanceLessThanK (int start, int end, int k) {
- std::vector<int> result(size, 100000005);
- std::vector<int> currentres (size, 1000000005);
- result[start] = 0;
- currentres[start] = 0;
- for (int i = 0; i < k ; i++) {
- for (int j = 0; j < edges.size(); j++) {
- if(currentres[edges[j].end] > result[edges[j].begin] + edges[j].weight) {
- currentres[edges[j].end] = result[edges[j].begin] + edges[j].weight;
- }
- }
- result = currentres;
- }
- return (result[end] < 100000005) ? result[end] : -1;
- }
- };
- int main() {
- std::vector<Edge> data;
- int N, M, K, S, F, S0, F0, P0;
- std::cin >> N >> M >> K >> S >> F;
- for (int i = 0; i < M; i++) {
- std::cin >> S0 >> F0 >> P0;
- Edge newe(S0-1, F0-1, P0);
- data.push_back(newe);
- }
- Graph graph(N, data);
- std::cout << graph.CountDistanceLessThanK(S-1, F-1, K);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement