Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize ("unroll-loops")
  3. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  4.  
  5. #include <bits/stdc++.h>
  6.  
  7. using namespace std;
  8.  
  9. #define fo(i, a, b) for(int i = a; i <= b; i++)
  10. #define _fo(i, a, b) for(int i = a; i >= b; i--)
  11. #define sz(a) ((int) a.size())
  12. #define all(a) begin(a), end(a)
  13. #define fi first
  14. #define se second
  15. #define pb(x) push_back(x)
  16. #define mk(x, y) make_pair(x, y)  
  17.  
  18. typedef long long ll;
  19. typedef pair<ll, ll> pll;
  20. typedef vector<ll> vl;
  21. typedef pair<int, int> pii;
  22. typedef vector<int> vi;
  23.  
  24. const int MAX = 1e3+5;
  25. const int MOD = 1e9+7;
  26. const ll INF = INT_MAX;
  27. const ll _INF = INT_MIN;
  28.  
  29. int n, m;
  30. int val[MAX];
  31. vector<pii> adj[MAX];
  32. int dis[MAX], ans[MAX];
  33. bool processed[MAX];
  34. priority_queue<tuple<int, int, int> > vq;
  35.  
  36. int solve() {
  37.     fill(dis+1, dis+1+n, INF);
  38.     fill(processed+1, processed+1+n, false);
  39.    
  40.     dis[1] = 0;
  41.     ans[1] = val[1];
  42.     vq.push(make_tuple(0, val[1], 1));
  43.     while(!vq.empty()) {
  44.         int v = get<2>(vq.top());  
  45.         vq.pop();
  46.        
  47.         if(processed[v]) continue;
  48.         if(v == n) return ans[v];
  49.         processed[v] = true;
  50.        
  51.         int s = sz(adj[v]);
  52.         fo(i, 0, s-1) {
  53.             int id = adj[v][i].fi, w = adj[v][i].se;
  54.             if(dis[v]+w < dis[id] || (dis[v]+w == dis[id] && ans[v]+val[id] > ans[id])) {
  55.                 dis[id] = dis[v]+w;
  56.                 ans[id] = ans[v]+val[id];
  57.                 vq.push(make_tuple(-dis[id], ans[id], id));
  58.             }
  59.         }
  60.     }
  61.    
  62.     return 0;
  63. }
  64.  
  65. signed main() {
  66.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  67.    
  68.     cin >> n;
  69.     fo(i, 1, n) cin >> val[i];
  70.     cin >> m;
  71.     while(m--) {
  72.         int p, q, u;
  73.         cin >> p >> q >> u;
  74.         adj[p].pb(mk(q, u));
  75.         adj[q].pb(mk(p, u));
  76.     }
  77.    
  78.     cout << solve();
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement