Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <string>
- #include <queue>
- #include <map>
- #include <vector>
- #include <set>
- #include <cmath>
- #include <iomanip>
- #include <algorithm>
- //#include <priority_queue>
- #include <stack>
- using namespace std;
- typedef long long ll;
- typedef double db;
- struct Node
- {
- vector<pair<ll, ll>> to;
- ll val;
- };
- int n, m;
- vector<Node> v;
- ll bfs(pair<ll, ll> start)
- {
- priority_queue<pair<ll, ll>> q;
- q.push(start);
- ll mx = start.first;
- while (!q.empty())
- {
- pair<ll, ll> n = q.top();
- q.pop();
- for (auto c : v[n.second].to)
- {
- mx = max(mx, n.first + c.first);
- q.push(make_pair(n.first + c.first, c.second));
- }
- }
- return mx;
- }
- int main()
- {
- cin >> n >> m;
- v.resize(n);
- for (int i = 0; i < n; i++)
- {
- cin >> v[i].val;
- }
- for (int i = 0; i < m; i++)
- {
- ll a, b;
- cin >> a >> b;
- a--; b--;
- v[a].to.push_back(make_pair(v[b].val, b));
- }
- ll mx = -1;
- for (ll i = 0; i < n; i++)
- {
- mx = max(mx, bfs(make_pair(v[i].val, i)));
- }
- cout << mx;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement