Submission #1243916

#TimeUsernameProblemLanguageResultExecution timeMemory
1243916CrabCNHConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
2 ms4932 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; } } namespace sub4 { 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; vector <int> d0; for (int i = 1; i <= n; i ++) { d0.push_back (L[i][0]); } sort (d0.begin (), d0.end ()); for (int i = 1; i <= n; i ++) { int ll = 0, r = n - 1, add = 0; while (true) { if (ll > r) { break; } int mid = (ll + r) >> 1; if (d0[mid] + L[i][1] + l <= K) { add = mid + 12; ll = mid + 1; } else { r = mid - 1; } } res += add; } for (int i = 1; i <= n; i ++) { res -= (L[i][1] + L[i][0] + l <= K); } 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}); } sub4 :: sol (); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...