Submission #1182702

#TimeUsernameProblemLanguageResultExecution timeMemory
1182702enkhochirConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
26 ms50500 KiB
#include <bits/stdc++.h>
using namespace std;
#include<ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define int long long
typedef tree<
int,
null_type,
less_equal<int>,
rb_tree_tag,
tree_order_statistics_node_update> 
ordered_set;
vector<pair<int,int>> adj[2000005];
int n,m;
int s,t,l,k;
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cin>>n>>m;
    cin>>s>>t>>l>>k;
    for(int i=0; i<m; i++){
        int u,v,w;
        cin>>u>>v>>w;
        adj[u].push_back({w,v});
        adj[v].push_back({w,u});
    }
    vector<int> d1(200005,1e16);
    vector<int> d2(200005,1e16);
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;
    d1[s]=0;
    q.push({0,s});
    while(!q.empty()){
        int w=q.top().first, node=q.top().second;
        q.pop();
        if(w!=d1[node]) continue;
        for(pair<int,int> &j: adj[node]){
            int nw=j.first+w, next=j.second;
            if(d1[next]>nw){
                d1[next]=nw;
                q.push({nw,next});
            }
        }
    }
    while(!q.empty()) q.pop();
    d2[t]=0;
    q.push({0,t});
    while(!q.empty()){
        int w=q.top().first, node=q.top().second;
        q.pop();
        if(w!=d2[node]) continue;
        for(pair<int,int> &j: adj[node]){
            int nw=j.first+w, next=j.second;
            if(d2[next]>nw){
                d2[next]=nw;
                q.push({nw,next});
            }
        }
    }
    ordered_set s,t;
    for(int i=1; i<=n; i++){
        s.insert(d1[i]);
    }
    for(int i=1; i<=n; i++){
        t.insert(d2[i]);
    }
    int ans=0;
    for(int i=1; i<=n; i++){
        ans+=t.order_of_key(k-l-d1[i]+1);
        ans+=s.order_of_key(k-l-d2[i]+1);
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...