Submission #1272310

#TimeUsernameProblemLanguageResultExecution timeMemory
1272310goulthenConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
150 ms26644 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ll long long #define rep(i,a,b) for (int i = a; i <= b; i++) #define per(i,a,b) for (int i = a; i >= b; i--) #define fi first #define se second #define pii pair<int,int> #define pb push_back const int MAXN = 2e5+10; const int INF = 1e18 + 5; const int MOD = 1e9+7; vector<pii> g[MAXN]; int dist[MAXN][2],n; bool vis[MAXN][2]; void dijkstra(int u, int k) { rep(i,1,n) dist[i][k] = INF; priority_queue<pii, vector<pii>, greater<pii>> pq; pq.push({0,u}); dist[u][k] = 0; while (!pq.empty()) { auto [d, cur] = pq.top();pq.pop(); if(vis[cur][k]) continue; vis[cur][k] = 1; for(auto &[v,w] : g[cur]) { if (dist[v][k] <= d+w) continue; dist[v][k] = d+w; pq.push({d+w,v}); } } } void solve() { int m,s,t,l,k; cin >> n >> m >> s >> t >> l >> k; rep(i,1,m) { int u,v,c;cin >> u >> v >> c; g[u].pb({v,c}); g[v].pb({u,c}); } dijkstra(s,0); dijkstra(t,1); if(dist[t][0] <= k) { cout << n*(n-1)/2 << '\n'; return; } vector<pii> val; vector<int> bs; rep(i,1,n) val.pb({dist[i][0], dist[i][1]}); sort(val.begin(),val.end()); int cnt = 0; for(auto &[du,dv] : val) { cnt += upper_bound(bs.begin(),bs.end(),k-l-dv) - bs.begin(); //cout << du << ' ' << dv << ' ' << upper_bound(bs.begin(),bs.end(),k-l-dv) - bs.begin() << '\n'; bs.pb(du); } cout << cnt << '\n'; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(nullptr); int tt = 1; //cin >> tt; while (tt--) 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...