Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <unordered_map>
- #include <climits>
- #include <queue>
- using namespace std;
- unordered_map<int, vector<int>> graph;
- int findMaxPath(int current, vector<int>& matrix, vector<int>& distances, int finish) {
- if (distances[current] != -6000)
- return distances[current];
- if (current == finish)
- return matrix[finish];
- int result = INT_MIN;
- int curr;
- for (auto neighbour : graph[current])
- {
- curr = findMaxPath(neighbour, matrix, distances, finish);
- if (curr > result)
- {
- result = curr;
- }
- }
- return distances[current] = result + matrix[current];
- }
- int main() {
- int n, k, a, b;
- cin >> n;
- vector<int> matrix(n * n);
- vector<int> distances(n * n, -6000);
- for (int i = 0; i < n * n; i++) {
- cin >> matrix[i];
- if ((i + 1) % n != 0)
- graph[i].push_back(i + 1);
- if ((i + n) < n * n)
- graph[i].push_back(i + n);
- }
- cin >> k;
- for (int i = 0; i < k; i++) {
- cin >> a >> b;
- graph[(a - 1) * n + b - 1].push_back(a * n + b);
- }
- cout << findMaxPath(0, matrix, distances, n * n - 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment