Submission #1270357

#TimeUsernameProblemLanguageResultExecution timeMemory
1270357bundaunuoctuongConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
4 ms328 KiB
#include<bits/stdc++.h> #define int long long using namespace std; int n,m,l,s,t,k; const int N=1e6+5; const long long INF=1e18; vector<pair<int,int>> g[N]; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q; int dist1[N],dist2[N]; void dijkstra(int src,int dist[]){ for(int i=1;i<=n;i++) dist[i]=INF; dist[src]=0; q.push({0,src}); while(!q.empty()){ int u=q.top().first; int v=q.top().second; q.pop(); if(dist1[v]<u) continue; for(auto& x:g[v]){ if(dist[x.first]>dist[v]+x.second){ dist[x.first]=dist[v]+x.second; q.push({dist[x.first],x.first}); } } } } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m;cin>>s>>t>>l>>k; 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}); } dijkstra(1,dist1); dijkstra(n,dist2); int K=k-1; if(K<0){ cout<<0; return 0; } vector<int> idx1(n); iota(idx1.begin(),idx1.end(),1); sort(idx1.begin(),idx1.end(),[&] (int a,int b){ return dist1[a]<dist1[b]; }); vector<int> idx2=idx1 ; sort(idx2.begin(),idx2.end(),[&] (int a,int b){ return dist2[a]<dist2[b]; }); int ans=0,j=n-1; for(int i=0;i<n;i++){ int x=idx1[i]; while(j>=0 and dist1[x]+dist2[idx2[j]]>K) j--; ans+=(j+1); if(dist1[x]+dist2[x]<=K) ans--; } iota(idx1.begin(),idx1.end(),1); sort(idx1.begin(),idx1.end(),[&] (int a,int b){ return dist2[a]<dist2[b]; }); sort(idx2.begin(),idx2.end(),[&] (int a,int b){ return dist1[a]<dist1[b]; }); j=n-1; for(int i=0;i<n;i++){ int x=idx1[i]; while(j >= 0 && dist2[x] + dist1[idx2[j]] > K) j--; ans += (j+1); if(dist1[x] + dist2[x] <= K) ans--; } cout<<ans/2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...