Submission #1243892

#TimeUsernameProblemLanguageResultExecution timeMemory
1243892CrabCNHConstruction Project 2 (JOI24_ho_t2)C++20
45 / 100
32 ms17248 KiB
#include <bits/stdc++.h>

#define int long long
#define pii pair <int, int>

using namespace std;

const int maxN = 2e5 + 5;
const int inf = 1e18 + 7;

struct Edge {
    int u, v, w;
};

int n, m;
int S, T, l, K;
vector <pii> adj[maxN];
vector <Edge> allE;

namespace sub3 {
    int L[maxN][2];

    inline void dijkstra (int st, int t) {
        priority_queue <pii, vector <pii>, greater <pii>> pq;
        for (int i = 1; i <= n; i ++) {
            L[i][t] = inf;
        }
        L[st][t] = 0;
        pq.push ({L[st][t], st});
        while (!pq.empty ()) {
            auto [c, u] = pq.top ();
            pq.pop ();
            if (c > L[u][t]) {
                continue;
            }
            for (auto [v, w] : adj[u]) {
                if (L[v][t] > L[u][t] + w) {
                    L[v][t] = L[u][t] + w;
                    pq.push ({L[v][t], v});
                }
            }
        }
        return;
    }

    inline void sol () {
        dijkstra (S, 0);
        dijkstra (T, 1);
        int minDist = L[T][0];
        if (minDist <= K) {
            cout << n * (n - 1) / 2;
            return;
        }
        int res = 0;
        for (int i = 1; i <= n; i ++) {
            for (int j = i + 1; j <= n; j ++) {
                if (min (L[i][0] + L[j][1] + l, L[i][1] + L[j][0] + l) <= K) {
                    res ++;
                }
            }
        }
        cout << res;
        return;
    }
}

signed main () {
    ios_base :: sync_with_stdio (0);
    cin.tie (0);
    cin >> n >> m;
    cin >> S >> T >> l >> K;
    for (int i = 1; i <= m; i ++) {
        int u, v, c;
        cin >> u >> v >> c;
        adj[u].push_back ({v, c});
        adj[v].push_back ({u, c});
        allE.push_back ({u, v, c});
    }
    if (n <= 3000 && m <= 3000) {
        sub3 :: sol ();
        return 0;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...