Submission #1160944

#TimeUsernameProblemLanguageResultExecution timeMemory
1160944PwoConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
208 ms25864 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

int n, m, s, t, l, k;
vector<pair<int, int>> g[200005];
int ds[200005], dt[200005];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector<int> d, e;

int32_t main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> n >> m >> s >> t >> l >> k;
	for (int i = 0; i < m; i++) {
		int u, v, w; cin >> u >> v >> w;
		g[u].emplace_back(v, w);
		g[v].emplace_back(u, w);
	}
	
	fill(ds, ds + n + 1, 1e18);
	fill(dt, dt + n + 1, 1e18);
	
	ds[s] = 0;
	pq.emplace(0, s);
	while (!pq.empty()) {
		auto c = pq.top(); pq.pop();
		if (ds[c.second] != c.first) continue;
		for (auto u : g[c.second]) {
		if (ds[u.first] > c.first + u.second) {
				ds[u.first] = c.first + u.second;
				pq.emplace(ds[u.first], u.first);
			}
		}
	}
	
	dt[t] = 0;
	pq.emplace(0, t);
	while (!pq.empty()) {
		auto c = pq.top(); pq.pop();
		if (dt[c.second] != c.first) continue;
		for (auto u : g[c.second]) {
		if (dt[u.first] > c.first + u.second) {
				dt[u.first] = c.first + u.second;
				pq.emplace(dt[u.first], u.first);
			}
		}
	}

	if (ds[t] <= k) { cout << (n * (n - 1)) / 2; return 0;}
	
	int ans = 0;
	for (int i = 1; i <= n; i++) d.push_back(dt[i]);
	for (int i = 1; i <= n; i++) e.push_back(ds[i]);
	sort(d.begin(), d.end());
	sort(e.begin(), e.end());
	
	for (int i = 1; i <= n; i++) {
		int c = k - l - ds[i];
		int it = upper_bound(d.begin(), d.end(), c) - d.begin();
		ans += it;
		int it2 = upper_bound(e.begin(), e.end(), k - l - dt[i]) - e.begin();
		ans += it2;
	}
	
	cout << ans / 2;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...