제출 #1322628

#제출 시각아이디문제언어결과실행 시간메모리
1322628vaishakhvConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
5 ms568 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back

const ll inf = 1e18;
const ll cap = 2e5+1;
ll n;
vector<pair<ll,ll>> adj[cap];

vector<ll> dijkstra(ll u) {
    vector<ll> dist(n, inf);
    priority_queue<pair<ll, ll>> pq;
    dist[u] = 0;
    pq.push({0, u});
    
    while (!pq.empty()) {
        auto [d, s] = pq.top();
        d *= -1;
        pq.pop();
        if (d > dist[s]) continue;       
        for (auto [v, w] : adj[s]) {      
            if (dist[s] + w < dist[v]) {  
                dist[v] = dist[s] + w;    
                pq.push({-dist[v], v});
            }
        }
    }
    return dist;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    ll m, s, t, l, k;
    cin >> n >> m >> s >> t >> l >> k;
    s--; t--;  
    
    for (ll i{}; i < m; i++) {
        ll a, b, c;
        cin >> a >> b >> c;
        a--; b--;
        adj[a].eb(b, c);
        adj[b].eb(a, c);
    }
    
    vector<ll> dist_s = dijkstra(s);
    vector<ll> dist_t = dijkstra(t);
    
    ll ans = 0;
    
    for (ll u{}; u < n; u++) {
        for (ll v = u + 1; v < n; v++) {
            if (dist_s[u] + l + dist_t[v] <= k || 
                dist_s[v] + l + dist_t[u] <= k) {
                 ans++;
            }
        }
    }
    
    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...