Submission #1322905

#TimeUsernameProblemLanguageResultExecution timeMemory
1322905cubedConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
250 ms22152 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define f first // #define s second #define pb(x) push_back(x) #define int long long /* ORDERED SET PDBS #include <bits/extc++.h> using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; */ const int MOD = 1e9+7; const int inf = 1e9; const int INF = 1e18+20; const int LOG = 25; void solve() { int n, m; cin>>n>>m; int s, t, l, k; cin>>s>>t>>l>>k; s--; t--; vector<vector<pair<int, int>>> adj(n); for (int i=0; i<m; i++) { int u, v, w; cin>>u>>v>>w; u--; v--; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } vector<int> d1(n, INF); d1[s]=0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; pq.push({0, s}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d1[u]!=d) continue; for (auto [v, w] : adj[u]) { if (d1[v] > d+w) { d1[v] = d+w; pq.push({d1[v], v}); } } } if (d1[t] <= k) { cout<<n*(n-1)/2<<endl; return; } vector<int> d2(n, INF); d2[t]=0; pq.push({0, t}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d2[u]!=d) continue; for (auto [v, w] : adj[u]) { if (d2[v] > d+w) { d2[v] = d+w; pq.push({d2[v], v}); } } } int cnt=0; sort(d1.begin(), d1.end()); sort(d2.begin(), d2.end()); int K = k-l; for (int i = 0; i<n; i++) { int left = K - d1[i]; auto it = upper_bound(d2.begin(), d2.end(), left); cnt += (it - d2.begin()); } cout<<cnt<<endl; } bool multi=false; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int t=1; if (multi) cin>>t; while (t--) solve(); 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...