Submission #1274971

#TimeUsernameProblemLanguageResultExecution timeMemory
1274971muhammad-ahmadConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
358 ms25960 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'

const int N = 2e5 + 5;
int n, m, s, t, l, k, dists[N], distt[N], vis[N];
vector<pair<int, int>> adj[N];

signed main(){
    cin >> n >> m >> s >> t >> l >> k;
    for (int i = 1; i <= m; i++){
    	int u, v, w; cin >> u >> v >> w;
    	adj[u].push_back({v, w});
    	adj[v].push_back({u, w});
    }
    
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
    
	q.push({0, s});
	for (int i = 1; i < N; i++) dists[i] = 1e18;
    dists[s] = 0;
	while (q.size()){
		auto [c, u] = q.top();
		q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (auto [v, w] : adj[u]){
			if (dists[u] + w < dists[v]){
				dists[v] = dists[u] + w;
				q.push({dists[v], v});
			}
		}
	}
	
    for (int i = 1; i < N; i++) {vis[i] = 0;}
    
    q.push({0, t});
	for (int i = 1; i < N; i++) distt[i] = 1e18;
    distt[t] = 0;
	while (q.size()){
		auto [c, u] = q.top();
		q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (auto [v, w] : adj[u]){
			if (distt[u] + w < distt[v]){
				distt[v] = distt[u] + w;
				q.push({distt[v], v});
			}
		}
	}
    
    vector<int> bs;
    for (int i = 1; i <= n; i++) bs.push_back(distt[i]);
    sort(bs.begin(), bs.end());
    
    if (dists[t] <= k){
    	cout << (n * (n - 1)) / 2 << endl;
    	return 0;
    }
    
    int ans = 0;
    
    for (int i = 1; i <= n; i++){
    	int left = k - (dists[i] + l);
    	int le = -1, r = bs.size();
    	while (r - le > 1){
    		int mid = (r + le) / 2;
    		if (bs[mid] <= left) le = mid;
    		else r = mid;
    	} 
    	ans += le + 1;
    }
//     
    cout << ans << endl;
    
	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...