Submission #1291089

#TimeUsernameProblemLanguageResultExecution timeMemory
1291089beheshtCommuter Pass (JOI18_commuter_pass)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>

#define d1(x)                cout << #x << " : " << x << endl << flush
#define d2(x, y)             cout << #x << " : " << x << "   " << #y << " : " << y << endl << flush
#define d3(x, y, z)          cout << #x << " : " << x << "   " << #y << " : " << y << "   " << #z << " : " << z << endl << flush
#define d4(x, y, z, a)       cout << #x << " : " << x << "   " << #y << " : " << y << "   " << #z << " : " << z << "    "<< #a << " : " << a << endl << flush
#define arr(x)               array <ll, x>
#define ld                   long double
#define ll                   long long
#define int                  long long
#define pb                   push_back
#define endl                 '\n'
#define lc                   v << 1
#define rc                   v << 1 | 1

using namespace std;

const int INF = 1e18 + (35 / 10); // 35 ---> 36
const int MAXN = 2e5 + (35 / 10); // 35 ---> 36

int dis[MAXN][4], a[4], n, m;
int mini[MAXN][2], ans = INF;
vector <arr(2)> adj[MAXN];

void dij(int U, int x){

    set <arr(2)> s;

    for(int i = 0; i < n; i++)
        dis[i][x] = INF;

    dis[U][x] = 0;
    s.insert({0, U});

    while(!s.empty()){
        auto [_, u] = *s.begin();
        s.erase(s.begin());

        for(auto [v, w] : adj[u]){
            if(dis[v][x] > dis[u][x] + w){
                dis[v][x] = dis[u][x] + w;
                s.insert({dis[v][x], v});
            }
        }
    }

    // d1(U + 1);
    // for(int i = 0; i < n; i++)
    //     d2(i + 1, dis[i][x]);
    // cout << endl;
}

void solve(int U, int x){

    set <arr(2)> s;
    s.insert({0, U});

    while(!s.empty()){
        auto [_, u] = *s.begin();
        s.erase(s.begin());
        
        for(auto [v, w] : adj[u]){

            if(w + dis[v][x ^ 1] == dis[u][x ^ 1]){
Hide quoted text
                
                mini[v][0] = min(mini[v][0], mini[u][0]);
                mini[v][1] = min(mini[v][1], mini[u][1]);

                s.insert({dis[v][x], v});
            }
        }

        ans = min(ans, mini[u][0] + mini[u][1]);
    }
}

signed main(){
    
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;

    for(int i = 0; i < 4; i++){
        cin >> a[i];
        a[i]--;
    }

    for(int i = 0; i < m; i++){
        int u, v, w;
        cin >> u >> v >> w;

        u--;
        v--;

        adj[u].pb({v, w});
        adj[v].pb({u, w});
    }

    for(int i = 0; i < 4; i++)
        dij(a[i], i);

    for(int i = 0; i < n; i++){
        mini[i][0] = dis[i][2];
        mini[i][1] = dis[i][3];

        // d1(i);
        // d4(dis[i][0], dis[i][1], dis[i][2], dis[i][3]);
    }
    
    solve(a[0],0);
    solve(a[1], 1);

    for(int i = 0; i < n; i++){
        ans = min(ans, mini[i][0] + mini[i][1]);
        // d3(i + 1, mini[i][0], mini[i][1]);
    }

    cout << ans << endl;
}

// Ey To Bahane! :_)))

// -------------<3------------- //
/*
Magasan dor shirini: 

1. MAXN
2. Input style
3. index or value? Masale In Ast!   
4. MOD 

*/

Compilation message (stderr)

commuter_pass.cpp: In function 'void solve(long long int, long long int)':
commuter_pass.cpp:65:1: error: 'Hide' was not declared in this scope
   65 | Hide quoted text
      | ^~~~