Submission #475717

# Submission time Handle Problem Language Result Execution time Memory
475717 2021-09-23T19:34:14 Z CodeChamp_SS Commuter Pass (JOI18_commuter_pass) C++17
100 / 100
951 ms 35980 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

#define ff                  first
#define ss                  second
#define pb                  push_back
#define eb                  emplace_back
#define mp                  make_pair
#define lb                  lower_bound
#define ub                  upper_bound
#define setbits(x)          __builtin_popcountll(x)
#define zrobits(x)          __builtin_ctzll(x)
#define sz(v)               (int)v.size()
#define ps(y)               cout << fixed << setprecision(y)
#define ms(arr, v)          memset(arr, v, sizeof(arr))
#define all(v)              v.begin(), v.end()
#define rall(v)             v.rbegin(), v.rend()
#define trav(x, v)          for(auto &x: v)
#define w(t)                int t; cin >> t; while(t--)
#define rep(i, a, b)        for(int i = a; i <= b; i++)
#define rrep(i, a, b)       for(int i = a; i >= b; i--)
#define rep0(i, n)          rep(i, 0, n - 1)
#define rrep0(i, n)         rrep(i, n - 1, 0)
#define rep1(i, n)          rep(i, 1, n)
#define rrep1(i, n)         rrep(i, n, 1)
#define inp(arr, n)         rep0(i, n) cin >> arr[i];

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> pii;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<pii> vp;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef map<ll, ll> mii;
typedef map<char, ll> mci;
typedef priority_queue<ll> pq_mx;
typedef priority_queue<vi, vvi, greater<>> pq_mn;
typedef tree<ll, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update> pbds;
/*
 * find_by_order(i) -> returns an iterator to the element at ith position (0 based)
 * order_of_key(i)  -> returns the position of element i (0 based)
 */

const int N = 2e5 + 5;
const int mod = 1e9 + 7;
//const int mod = 998244353;
const ll inf = 1e18;
const double eps = 1e-10;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void fio() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
}

int n, m, S, T, U, V;
ll dp[2][N], res;
vi du, dv;
vp gr[N];

vi dijkstra(int src) {
    vi dist(n + 1, inf);
    dist[src] = 0;
    set<pii> q;
    q.emplace(0, src);
    while (!q.empty()) {
        auto[d, cur] = *q.begin();
        q.erase(q.begin());
        trav(neigh, gr[cur]) {
            if (dist[neigh.ff] > d + neigh.ss) {
                auto it = q.find({dist[neigh.ff], neigh.ff});
                if (it != q.end()) q.erase(it);
                dist[neigh.ff] = d + neigh.ss, q.emplace(dist[neigh.ff], neigh.ff);
            }
        }
    }
    return dist;
}

void f(ll s, ll e) {
    rep0(i, 2) {
        rep0(x, n + 1) dp[i][x] = inf;
    }
    vi dist(n + 1, inf);
    vb vis(n + 1, false);
    pq_mn q;
    q.push({0, s, 0});
    while (!q.empty()) {
        vi v = q.top();
        q.pop();
        ll d = v[0], cur = v[1], par = v[2];
        if (!vis[cur]) {
            vis[cur] = true, dist[cur] = d;
            dp[0][cur] = min(du[cur], dp[0][par]);
            dp[1][cur] = min(dv[cur], dp[1][par]);
            trav(neigh, gr[cur]) q.push({d + neigh.ss, neigh.ff, cur});
        } else if (dist[cur] == d) {
            if (min(dp[0][par], du[cur]) + min(dp[1][par], dv[cur]) <= dp[0][cur] + dp[1][cur]) {
                dp[0][cur] = min(du[cur], dp[0][par]);
                dp[1][cur] = min(dv[cur], dp[1][par]);
            }
        }
    }

    res = min(res, dp[0][e] + dp[1][e]);
}


int main() {
    fio();

    cin >> n >> m >> S >> T >> U >> V;
    rep0(x, m) {
        int u, v, w;
        cin >> u >> v >> w;
        gr[u].eb(v, w), gr[v].eb(u, w);
    }
    du = dijkstra(U), dv = dijkstra(V);
    res = du[V];
    f(S, T), f(T, S);
    cout << res;

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 935 ms 34224 KB Output is correct
2 Correct 725 ms 34504 KB Output is correct
3 Correct 695 ms 32912 KB Output is correct
4 Correct 893 ms 33848 KB Output is correct
5 Correct 650 ms 29024 KB Output is correct
6 Correct 925 ms 35980 KB Output is correct
7 Correct 700 ms 33112 KB Output is correct
8 Correct 683 ms 34016 KB Output is correct
9 Correct 799 ms 34744 KB Output is correct
10 Correct 715 ms 34512 KB Output is correct
11 Correct 157 ms 16164 KB Output is correct
12 Correct 867 ms 33796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 821 ms 33728 KB Output is correct
2 Correct 695 ms 29524 KB Output is correct
3 Correct 724 ms 32956 KB Output is correct
4 Correct 732 ms 29576 KB Output is correct
5 Correct 740 ms 29872 KB Output is correct
6 Correct 715 ms 33576 KB Output is correct
7 Correct 744 ms 30224 KB Output is correct
8 Correct 725 ms 29916 KB Output is correct
9 Correct 701 ms 29864 KB Output is correct
10 Correct 734 ms 33488 KB Output is correct
11 Correct 166 ms 16196 KB Output is correct
12 Correct 700 ms 33584 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 47 ms 8368 KB Output is correct
2 Correct 4 ms 5068 KB Output is correct
3 Correct 3 ms 5068 KB Output is correct
4 Correct 93 ms 11420 KB Output is correct
5 Correct 45 ms 9300 KB Output is correct
6 Correct 5 ms 5196 KB Output is correct
7 Correct 6 ms 5324 KB Output is correct
8 Correct 8 ms 5452 KB Output is correct
9 Correct 5 ms 5196 KB Output is correct
10 Correct 41 ms 9300 KB Output is correct
11 Correct 3 ms 4940 KB Output is correct
12 Correct 3 ms 5036 KB Output is correct
13 Correct 4 ms 5068 KB Output is correct
14 Correct 4 ms 5176 KB Output is correct
15 Correct 4 ms 5196 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 935 ms 34224 KB Output is correct
2 Correct 725 ms 34504 KB Output is correct
3 Correct 695 ms 32912 KB Output is correct
4 Correct 893 ms 33848 KB Output is correct
5 Correct 650 ms 29024 KB Output is correct
6 Correct 925 ms 35980 KB Output is correct
7 Correct 700 ms 33112 KB Output is correct
8 Correct 683 ms 34016 KB Output is correct
9 Correct 799 ms 34744 KB Output is correct
10 Correct 715 ms 34512 KB Output is correct
11 Correct 157 ms 16164 KB Output is correct
12 Correct 867 ms 33796 KB Output is correct
13 Correct 821 ms 33728 KB Output is correct
14 Correct 695 ms 29524 KB Output is correct
15 Correct 724 ms 32956 KB Output is correct
16 Correct 732 ms 29576 KB Output is correct
17 Correct 740 ms 29872 KB Output is correct
18 Correct 715 ms 33576 KB Output is correct
19 Correct 744 ms 30224 KB Output is correct
20 Correct 725 ms 29916 KB Output is correct
21 Correct 701 ms 29864 KB Output is correct
22 Correct 734 ms 33488 KB Output is correct
23 Correct 166 ms 16196 KB Output is correct
24 Correct 700 ms 33584 KB Output is correct
25 Correct 47 ms 8368 KB Output is correct
26 Correct 4 ms 5068 KB Output is correct
27 Correct 3 ms 5068 KB Output is correct
28 Correct 93 ms 11420 KB Output is correct
29 Correct 45 ms 9300 KB Output is correct
30 Correct 5 ms 5196 KB Output is correct
31 Correct 6 ms 5324 KB Output is correct
32 Correct 8 ms 5452 KB Output is correct
33 Correct 5 ms 5196 KB Output is correct
34 Correct 41 ms 9300 KB Output is correct
35 Correct 3 ms 4940 KB Output is correct
36 Correct 3 ms 5036 KB Output is correct
37 Correct 4 ms 5068 KB Output is correct
38 Correct 4 ms 5176 KB Output is correct
39 Correct 4 ms 5196 KB Output is correct
40 Correct 951 ms 35032 KB Output is correct
41 Correct 863 ms 34204 KB Output is correct
42 Correct 885 ms 35560 KB Output is correct
43 Correct 164 ms 16324 KB Output is correct
44 Correct 167 ms 16416 KB Output is correct
45 Correct 601 ms 27412 KB Output is correct
46 Correct 596 ms 28164 KB Output is correct
47 Correct 856 ms 29992 KB Output is correct
48 Correct 176 ms 15684 KB Output is correct
49 Correct 812 ms 33772 KB Output is correct
50 Correct 620 ms 28060 KB Output is correct
51 Correct 623 ms 27916 KB Output is correct