Submission #1316889

#TimeUsernameProblemLanguageResultExecution timeMemory
13168891otaConstruction Project 2 (JOI24_ho_t2)C++20
8 / 100
248 ms24716 KiB
#include <bits/stdc++.h>
using namespace std;

#define endl "\n"
#define int long long
#define pii pair<int, int>
#define ff first
#define ss second
#define entire(x) (x).begin(), (x).end()

const int inf = 9e17;

int32_t main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    int n, m; cin >> n >> m;
    int source, sink, l, k; cin >> source >> sink >> l >> k; 
    vector<vector<pii>> adj(n); source--, sink--;

    for (int i = 0; i < m; i++){
        int u, v, w; cin >> u >> v >> w; u--, v--;
        adj[u].push_back(pii{v, w}); adj[v].push_back(pii{u, w});
    }

    auto dijkstra = [&](int s, vector<int>& dist){
        fill(entire(dist), inf);
        priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push(pii{0, s});
        while (!pq.empty()){
            auto [d, u] = pq.top(); pq.pop();
            if (dist[u] != inf) continue;
            else dist[u] = d;
            for (auto [v, w] : adj[u]) pq.push(pii{d + w, v});
        }
    };

    vector<int> s(n), t(n);
    dijkstra(source, s); dijkstra(sink, t);

    if (s[sink] <= k) { cout << (n * (n-1)) / 2 << endl; return 0; }



    int ans = 1;
    for (int i = 0; i < n; i++) if (i != sink) ans += (s[i] == 1) + (t[i] == 1);
    // for (int u = 0; u < n; u++) for (int v = u + 1; v < n; v++){
    //     int d = min(s[u] + t[v], s[v] + t[u]) + l;
    //     if (d <= k) ans++;
    // }

    cout << ans << endl;
    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...