제출 #1324474

#제출 시각아이디문제언어결과실행 시간메모리
1324474mantaggezConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
144 ms24404 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll, ll>; const int nx = 2e5+5; const ll INF = 1e18; ll n, m, s, t, l, k, res; vector<ll> distS(nx, INF), distT(nx, INF), D; vector<pii> adj[nx]; priority_queue<pii, vector<pii>, greater<pii>> pq; void dijkstra(ll src, vector<ll>& dist) { dist[src] = 0; pq.push({0, src}); while(!pq.empty()) { auto [cw, u] = pq.top(); pq.pop(); if(cw > dist[u]) continue; for(auto [v, nw] : adj[u]) { if(dist[v] > dist[u] + nw) { dist[v] = dist[u] + nw; pq.push({dist[v], v}); } } } } int main() { cin.tie(NULL)->sync_with_stdio(false); cin >> n >> m; cin >> s >> t >> l >> k; for(int i=0;i<m;i++) { ll u, v, w; cin >> u >> v >> w; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } dijkstra(s, distS); dijkstra(t, distT); // O(N^2) // for(int i=1;i<=n;i++) // { // for(int j=i+1;j<=n;j++) // { // ll d = min(distS[i] + l + distT[j], distS[j] + l + distT[i]); // if(d <= k || distS[t] <= k) { // cout << i << ' ' << j << '\n'; // res++; // } // } // } for(int i=1;i<=n;i++) D.push_back(distT[i]); sort(D.begin(), D.end()); // distT[j] <= k - l - distS[i] for(int i=1;i<=n;i++) { auto it = upper_bound(D.begin(), D.end(), k - l - distS[i]); // cout << i << ' ' << it - D.begin() << '\n'; ll cnt = it - D.begin(); res += cnt; } cout << (distS[t] <= k ? (n * (n - 1)) / 2 : res) ; 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...