제출 #1263090

#제출 시각아이디문제언어결과실행 시간메모리
1263090norman165Construction Project 2 (JOI24_ho_t2)C++20
45 / 100
2094 ms24608 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define int long long #define yes() cout << "YES\n" #define no() cout << "NO\n" using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; const int inf = 1e18; const int mod = 1e9 + 7; const int maxn = 1e6; const int mod1 = 998244353; const int mod2 = 1e18 + 1; const int mod3 = 1e9 + 9; const int mod4 = 333333333; const int mod5 = 200000; const int mod6 = 10007; const int k = 3000; const int w = 1e5; const ld EPS = 1e-8; int LOG = 30; struct Fen { vector<int> t; int n; Fen(int x) { n = x; t.resize(n + 1); } int sum(int r) { int ans = 0; for (; r > 0; r -= (r & (-r))) ans += t[r]; return ans; } int get(int l, int r) { return sum(r) - sum(l - 1); } void upd(int i, int x) { for (; i <= n; i += (i & (-i))) t[i] += x; } }; void solve() { int n, m, s, t, l, k; cin >> n >> m >> s >> t >> l >> k; s--, t--; vector<vector<pair<int, int>>> g(n); for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; u--, v--; g[u].push_back({v, w}); g[v].push_back({u, w}); } vector<int> d1(n, inf); set<pair<int, int>> st; d1[s] = 0; st.insert({0, s}); while (st.size()) { int v = st.begin()->second; st.erase(st.begin()); for (auto& [u, w] : g[v]) { if (d1[u] > d1[v] + w) d1[u] = d1[v] + w, st.insert({d1[u], u}); } } if (d1[t] <= k) { cout << n * (n - 1) / 2 << "\n"; return; } vector<int> d2(n, inf); d2[t] = 0; st.insert({0, t}); while (st.size()) { int v = st.begin()->second; st.erase(st.begin()); for (auto& [u, w] : g[v]) { if (d2[u] > d2[v] + w) d2[u] = d2[v] + w, st.insert({d2[u], u}); } } Fen seg1(5e5 + 1); Fen seg2(5e5 + 1); int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (d1[i] + d2[j] + l <= k) ans++; } // seg1.upd(d1[i], 1); // seg2.upd(d2[i], 1); } for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (d2[i] + d1[j] + l <= k) ans++; } } cout << ans << "\n"; } signed main() { // cout.precision(16); ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (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...