제출 #1156981

#제출 시각아이디문제언어결과실행 시간메모리
1156981mychecksedadConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
257 ms42412 KiB
/* Author : Mychecksdead */ #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30; ll n, m, s, t, k, l; vector<pair<int, ll>> g[N]; void solve(){ cin >> n >> m >> s >> t >> l >> k; --s,--t; for(int i = 1; i <= m; ++i){ int u, v, w; cin >>u >> v >> w; --u,--v; g[u].pb({v, w}); g[v].pb({u, w}); } priority_queue<pair<ll,int>>Q; vector<ll> dist(n, (ll)1e18*1ll); vector<ll> dist2(n, (ll)1e18*1ll); vector<bool> used(n); Q.push({0, s}); dist[s] = 0; while(!Q.empty()){ int v = Q.top().ss; Q.pop(); if(used[v]) continue; used[v] = 1; for(auto [u, w]: g[v]){ if(dist[u] > dist[v] + w){ dist[u] = dist[v] + w; Q.push({-dist[u], u}); } } } fill(all(used), 0); Q.push({0, t}); dist2[t] = 0; while(!Q.empty()){ int v = Q.top().ss; Q.pop(); if(used[v]) continue; used[v] = 1; for(auto [u, w]: g[v]){ if(dist2[u] > dist2[v] + w){ dist2[u] = dist2[v] + w; Q.push({-dist2[u], u}); } } } if(dist[t] <= k){ cout << n*(n-1)/2; }else{ ll ans=0; sort(all(dist)); sort(all(dist2)); for(ll x: dist){ ans += upper_bound(all(dist2), k - l - x) - dist2.begin(); } cout<<ans; } } int main(){ cin.tie(0); ios::sync_with_stdio(0); int tt = 1, aa; // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); while(tt--){ solve(); en; } cerr<<"time taken : "<<(float)clock()/CLOCKS_PER_SEC<<" seconds\n"; 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...