Submission #1179572

#TimeUsernameProblemLanguageResultExecution timeMemory
1179572nekolieConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
269 ms22884 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,s,t,c0,a,b,c; cin >> n >> m; long long k, odl[n+1][2], odp = 0; cin >> s >> t >> c0 >> k; vector<pair<int,int>> g[n+1]; for (int i = 0; i < m; i++) cin >> a >> b >> c, g[a].push_back({b,c}), g[b].push_back({a,c}); bool odw[n+1]; for (int i = 1; i <= n; i++) odw[i] = false, odl[i][0] = odl[i][1] = 1000000000000000000; priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>> q; odl[s][0] = odl[t][1] = 0, q.push({0,s}); while (!q.empty()) { long long d = q.top().first; int v = q.top().second; q.pop(); if (odw[v]) continue; odw[v] = true; for (auto e : g[v]) if (odl[e.first][0] > d+e.second) odl[e.first][0] = d+e.second, q.push({d+e.second,e.first}); } if (odl[t][0] <= k) odp = 1ll*n*(n-1)/2; else { fill(odw,odw+n+1,false), q.push({0,t}); while (!q.empty()) { long long d = q.top().first; int v = q.top().second; q.pop(); if (odw[v]) continue; odw[v] = true; for (auto e : g[v]) if (odl[e.first][1] > d+e.second) odl[e.first][1] = d+e.second, q.push({d+e.second,e.first}); } vector<long long> v; for (int i = 1; i <= n; i++) v.push_back(odl[i][1]); sort(v.begin(),v.end()); for (int i = 1; i <= n; i++) { int l = 0, r = n-1; while (l < r) { int mid = (l+r)/2; if (odl[i][0]+v[mid]+c0 > k) r = mid; else l = mid+1; } odp += l; } } cout << odp << 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...