Submission #1201047

#TimeUsernameProblemLanguageResultExecution timeMemory
1201047akuygaConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
229 ms24396 KiB
#include<bits/stdc++.h> #define ii pair<int,int> #define f first #define s second #define mp make_pair #define int long long using namespace std; int32_t main(){ int N,M; cin>>N>>M; vector<ii> A[N+1]; int S,T,L,K; cin>>S>>T>>L>>K; while(M--){ int x,y,z; cin>>x>>y>>z; A[x].push_back(mp(z,y)); A[y].push_back(mp(z,x)); } vector<int> dist1(N+1,LLONG_MAX); priority_queue<ii,vector<ii>,greater<ii>> PQ; dist1[S]=0; PQ.push(mp(0,S)); while(!PQ.empty()){ int node=PQ.top().s; int d=PQ.top().f; PQ.pop(); if(dist1[node]!=d)continue; for(auto i:A[node]) if(dist1[i.s]>d+i.f){ dist1[i.s]=d+i.f; PQ.push(mp(d+i.f,i.s)); } } if(dist1[T]<=K){cout<<(N*(N-1))/2; return 0;} vector<int> dist2(N+1,LLONG_MAX); dist2[T]=0; PQ.push(mp(0,T)); while(!PQ.empty()){ int node=PQ.top().s; int d=PQ.top().f; PQ.pop(); if(dist2[node]!=d)continue; for(auto i:A[node]) if(dist2[i.s]>d+i.f){ dist2[i.s]=d+i.f; PQ.push(mp(d+i.f,i.s)); } } vector<int> V; for(int i=1;i<=N;i++){ if(dist2[i]!=LLONG_MAX)V.push_back(dist2[i]); } sort(V.begin(),V.end()); int c=0; for(int i=1;i<=N;i++){ if(dist1[i]==LLONG_MAX)continue; int quota=K-dist1[i]-L; auto itr=upper_bound(V.begin(),V.end(),quota); c+=itr-V.begin(); } cout<<c; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...