Submission #1242054

#TimeUsernameProblemLanguageResultExecution timeMemory
1242054GeforgsConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
217 ms30196 KiB
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <queue> #include <map> #include <unordered_map> #include <stack> #include <bitset> #include <string> #include <cstring> #include <iterator> #include <random> #define ll long long #define ld long double #define inf (ll)(2*1e18) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define pb push_back #define endl "\n" using namespace std; void Dijkstra(ll start, vector<vector<pair<ll, ll>>>& a, vector<ll>& dis){ set<pair<ll, ll>> s; s.insert({0, start}); dis[start] = 0; while(!s.empty()){ auto [val, x] = *s.begin(); s.erase(s.begin()); for(auto [y, w]: a[x]){ if(dis[y] > val + w){ s.erase({dis[y], y}); dis[y] = val + w; s.insert({dis[y], y}); } } } } void solve(){ ll n, m, k, l, i, start, finish, x, y, w, res=0; cin>>n>>m>>start>>finish>>l>>k; --start; --finish; vector<vector<pair<ll, ll>>> a(n); vector<ll> dis1(n, inf); vector<ll> dis2(n, inf); for(i=0;i<m;++i){ cin>>x>>y>>w; --x; --y; a[x].pb({y, w}); a[y].pb({x, w}); } Dijkstra(start, a, dis1); Dijkstra(finish, a, dis2); if(dis1[finish] <= k){ cout<<n*(n-1)/2<<endl; return; } sort(dis1); sort(dis2); k -= l; for(i=0;i<n;++i){ res += upper_bound(dis2.begin(), dis2.end(), k - dis1[i]) - dis2.begin(); } cout<<res<<endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); srand(time(nullptr)); ll t=1; // cin>>t; for(;t>0;--t){ 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...