Submission #1136770

#TimeUsernameProblemLanguageResultExecution timeMemory
1136770UnforgettableplConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
219 ms24880 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m,s,t,l,k; cin >> n >> m >> s >> t >> l >> k; vector<vector<pair<int,int>>> adj(n+1); for(int i=1;i<=m;i++) { int a,b,c;cin>>a>>b>>c; adj[a].emplace_back(b,c); adj[b].emplace_back(a,c); } auto dijkastra = [&](int x,vector<int> &ans) { priority_queue<pair<int,int>> pq; pq.emplace(0,x); vector<bool> visited(n+1); while(!pq.empty()) { auto [dist,curr] = pq.top();pq.pop();dist=-dist; if(visited[curr])continue; visited[curr]=true; ans[curr]=dist; for(auto&[x,c]:adj[curr])if(!visited[x])pq.emplace(-dist-c,x); } }; vector<int> distFromS(n+1,1e16); dijkastra(s,distFromS); vector<int> distFromT(n+1,1e16); dijkastra(t,distFromT); if(distFromS[t]<=k) { cout << n*(n-1)/2 << '\n'; return 0; } distFromT.erase(distFromT.begin()); sort(distFromT.begin(), distFromT.end()); int ans = 0; for(int i=1;i<=n;i++) { int allowed = k-distFromS[i]-l; ans+=upper_bound(distFromT.begin(), distFromT.end(), allowed)-distFromT.begin(); } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...