Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 1e9
- using namespace std;
- const long long NMAX = 1e5;
- vector <long long> d(NMAX , INF) , d1(NMAX , INF);
- vector <vector <pair <long long , long long> > > g(NMAX);
- priority_queue<pair <long long , long long>> q , q1;
- int main() {
- freopen ("INPUT.TXT" , "r" , stdin);
- freopen ("OUTPUT.TXT" , "w" , stdout);
- long long n , m , k;
- cin >> n >> m >> k;
- long long A , B;
- cin >> A >> B;
- long long v[k + 1] , c[k + 1];
- for (long long i = 1; i <= k; i++) {
- cin >> v[i] >> c[i];
- }
- for (long long i = 1; i <= m; i++) {
- long long x , y , w;
- cin >> x >> y >> w;
- g[x].push_back({y , w});
- g[y].push_back({x , w});
- }
- long long s = A;
- q.push({0 , s});
- d[s] = 0;
- while (!q.empty()) {
- long long it = q.top().second , mn = -q.top().first;
- q.pop();
- if (mn > d[it]) continue;
- for (long long j = 0; j < g[it].size(); j++) {
- long long to = g[it][j].first;
- long long len = g[it][j].second;
- if (d[it] + len < d[to]) {
- d[to] = d[it] + len;
- q.push({-d[to] , to});
- }
- }
- }
- s = B;
- q1.push({0 , s});
- d1[s] = 0;
- while (!q1.empty()) {
- long long it = q1.top().second , mn = -q1.top().first;
- q1.pop();
- if (mn > d1[it]) continue;
- for (long long j = 0; j < g[it].size(); j++) {
- long long to = g[it][j].first;
- long long len = g[it][j].second;
- if (d1[it] + len < d1[to]) {
- d1[to] = d1[it] + len;
- q1.push({-d1[to] , to});
- }
- }
- }
- long long mn = 1e18;
- for (long long i = 1; i <= k; i++) {
- mn = min(d[v[i]] + d1[v[i]] + c[i] , mn);
- }
- cout << mn;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement