Submission #1239078

#TimeUsernameProblemLanguageResultExecution timeMemory
1239078sunnatConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
384 ms30188 KiB
#include <algorithm> #include <iostream> #include <vector> #include <queue> #include <map> #include <set> using namespace std; #define int long long signed main(){ cin.tie(nullptr)->sync_with_stdio(false); int n, m, s, t, l, k; cin >> n >> m >> s >> t >> l >> k; vector<vector<pair<int, int> > > g(n+1); for(int i = 0, u, v, w; i < m; ++i){ cin >> u >> v >> w; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } const int no_path = 1e18; auto djikstra = [&](int from){ vector<int> dist(n+1, no_path); set<pair<int, int>> q; dist[from] = 0; q.emplace(0, from); while(!q.empty()){ auto [W, v] = *q.begin(); q.erase(q.begin()); if(W != dist[v]) continue; for(auto [u, w]:g[v]) if(dist[u] > W + w){ q.erase({dist[u], u}); dist[u] = W + w; q.emplace(dist[u], u); } } return dist; }; auto from_s = djikstra(s); if(from_s[t] <= k){ cout << n * (n - 1) / 2; return 0; } if(l > k){ cout << 0; return 0; } auto from_t = djikstra(t); sort(from_s.begin(), from_s.end()); sort(from_t.begin(), from_t.end()); int res = 0; k -= l; for(int i = 0, j = n - 1; i < n; ++ i){ while(j >= 0 && from_s[i] + from_t[j] > k) -- j; res += j + 1; } cout << res; 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...