Submission #1112309

#TimeUsernameProblemLanguageResultExecution timeMemory
1112309luvnaConstruction Project 2 (JOI24_ho_t2)C++14
8 / 100
127 ms26588 KiB
#include<bits/stdc++.h> #define all(v) v.begin(), v.end() #define endl "\n" #define int long long using namespace std; typedef long long ll; const int N = 2e5 + 15; int n, m, S, T; ll L, limit; vector<pair<int,int>> g[N]; vector<ll> distS, distT; void dijk(vector<ll>& dist, int root){ dist.resize(N, 0x3f); dist[root] = 0; priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> pq; pq.push({0,root}); while(!pq.empty()){ ll wu; int u; tie(wu, u) = pq.top(); pq.pop(); if(wu > dist[u]) continue; for(auto [v, wv] : g[u]){ if(dist[v] > dist[u] + wv){ dist[v] = dist[u] + wv; pq.push({dist[v],v}); } } } } void solve(){ cin >> n >> m; cin >> S >> T >> L >> limit; for(int i = 1; i <= m; i++){ int u, v, w; cin >> u >> v >> w; g[u].push_back({v,w}); g[v].push_back({u,w}); } dijk(distS, S); dijk(distT, T); if(distS[T] <= limit){//match whatever cout << 1LL*n*(n-1) / 2; return; } ll ans = 0; vector<ll> A, B; //a + b + L <= limit //a <= limit - L - b //sort a decrease, sort b increase -> greed for(int i = 1; i <= n; i++){ A.push_back(distS[i]); B.push_back(distT[i]); } sort(all(A), greater<ll>()); sort(all(B)); for(int i = 0,j = 0; i < A.size(); i++){ while(j < B.size() && B[j] <= limit - L - A[i]) j++; ans += j; } cout << ans; } signed main(){ ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); #define task "task" if(fopen(task".INP", "r")){ freopen(task".INP", "r", stdin); freopen(task".OUT", "w", stdout); } int t; t = 1; //cin >> t; while(t--) solve(); }

Compilation message (stderr)

Main.cpp: In function 'void dijk(std::vector<long long int>&, long long int)':
Main.cpp:26:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   26 |         for(auto [v, wv] : g[u]){
      |                  ^
Main.cpp: In function 'void solve()':
Main.cpp:69:28: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for(int i = 0,j = 0; i < A.size(); i++){
      |                          ~~^~~~~~~~~~
Main.cpp:70:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |         while(j < B.size() && B[j] <= limit - L - A[i]) j++;
      |               ~~^~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:84:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |         freopen(task".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:85:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |         freopen(task".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...