Submission #1237391

#TimeUsernameProblemLanguageResultExecution timeMemory
1237391t_hollConstruction Project 2 (JOI24_ho_t2)C++20
45 / 100
2093 ms21476 KiB
#include <bits/stdc++.h> #define int long long #define MULTITEST false using namespace std; const int INF = 5e17; struct Road { int a, b, cost; int next (int u) { return u == a ? b : a; } }; vector<Road> road_list; vector<vector<int>> roads; int N; vector<int> dijkstra (int start) { priority_queue<pair<int, int>> queue; vector<int> distances(N, INF); distances[start] = 0; queue.push({ 0, start }); while (queue.size() != 0) { pair<int, int> u = queue.top(); queue.pop(); int curr = u.second; int dist = - u.first; if (distances[curr] != dist) continue ; for (int r_id : roads[curr]) { int next = road_list[r_id].next(curr); int cost = dist + road_list[r_id].cost; if (distances[next] <= cost) continue ; distances[next] = cost; queue.push({ - cost, next }); } } return distances; } void solve () { cin >> N; int M; cin >> M; int s, t, l, k; cin >> s >> t >> l >> k; s --; t --; roads.resize(N); for (int i = 0; i < M; i ++) { int a, b, c; cin >> a >> b >> c; a --, b --; road_list.push_back({ a, b, c }); roads[a].push_back(i); roads[b].push_back(i); } int count = 0; vector<int> d_s = dijkstra(s); vector<int> d_t = dijkstra(t); if (d_s[t] <= k) { count = (N * (N - 1)) >> 1; cout << count << "\n"; return ; } for (int a = 0; a < N; a ++) { for (int b = a + 1; b < N; b ++) { int dAB = d_s[a] + l + d_t[b]; int dBA = d_s[b] + l + d_t[a]; if (min(dAB, dBA) <= k) count ++; } } cout << count << "\n"; } signed main () { ios_base::sync_with_stdio(false); cin.tie(NULL); int T = 1; if (MULTITEST) cin >> T; for (int t = 0; t < T; t ++) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...