Submission #1152214

#TimeUsernameProblemLanguageResultExecution timeMemory
1152214irmuunConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
228 ms33256 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n,m;
    cin>>n>>m;
    ll S,T,L,K;
    cin>>S>>T>>L>>K;
    vector<pair<ll,ll>>g[n+5];
    for(ll i=1;i<=m;i++){
        ll a,b,c;
        cin>>a>>b>>c;
        g[a].pb({b,c});
        g[b].pb({a,c});
    }
    vector<ll>dist(n+5,(ll)1e18);
    set<pair<ll,ll>>q;
    dist[S]=0;
    q.insert({0ll,S});
    while(!q.empty()){
        auto [d,i]=*q.begin();
        q.erase(q.begin());
        if(dist[i]!=d) continue;
        for(auto [j,w]:g[i]){
            if(dist[i]+w<dist[j]){
                dist[j]=dist[i]+w;
                q.insert({dist[j],j});
            }
        }
    }
    if(dist[T]<=K){
        cout<<n*(n-1)/2;
        return 0;
    }
    vector<vector<ll>>v;
    v.pb(dist);
    fill(all(dist),(ll)1e18);
    dist[T]=0;
    q.insert({0ll,T});
    while(!q.empty()){
        auto [d,i]=*q.begin();
        q.erase(q.begin());
        if(dist[i]!=d) continue;
        for(auto [j,w]:g[i]){
            if(dist[i]+w<dist[j]){
                dist[j]=dist[i]+w;
                q.insert({dist[j],j});
            }
        }
    }
    v.pb(dist);
    ll l[n+5],r[n+5];
    for(ll i=1;i<=n;i++){
        l[i]=v[0][i];
        r[i]=v[1][i];
    }
    sort(l+1,l+n+1);
    sort(r+1,r+n+1);
    ll ans=0;
    for(ll i=1;i<=n;i++){
        ll x=upper_bound(r+1,r+n+1,K-L-l[i])-r-1;
        ans+=x;
        // b<=K-L-a
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...