제출 #1268635

#제출 시각아이디문제언어결과실행 시간메모리
1268635ducksaysquackConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
254 ms23820 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
	int n, m, s, t, l, k; cin >> n >> m >> s >> t >> l >> k; s--, t--;
	vector<vector<pair<int,int>>> adj(n); 
	for(int i=0;i<m;i++) {
		int x, y, z; cin >> x >> y >> z; x--, y--;
		adj[x].push_back({y,z}), adj[y].push_back({x,z});
	}
	vector<int> ds(n,1e18), dt(n,1e18); vector<bool> ps(n), pt(n);
	ds[s] = 0, dt[t] = 0; priority_queue<pair<int,int>> q; q.push({0,s});
	while(!q.empty()) {
		int a = q.top().second; q.pop();
		if(ps[a]) continue; ps[a] = true;
		for(auto u:adj[a]) {
			int b = u.first, w = u.second;
			if(ds[a]+w < ds[b]) {ds[b] = ds[a]+w; q.push({-ds[b],b});}
		}
	}
	q.push({0,t}); while(!q.empty()) {
		int a = q.top().second; q.pop();
		if(pt[a]) continue; pt[a] = true;
		for(auto u:adj[a]) {
			int b = u.first, w = u.second;
			if(dt[a]+w < dt[b]) {dt[b] = dt[a]+w; q.push({-dt[b],b});}
		}
	}
	if(ds[t] <= k) {cout << n*(n-1)/2; return 0;}
	sort(begin(ds),end(ds)), sort(begin(dt),end(dt));
	int ans = 0, y = n-1;
	for(int i=0;i<n;i++) {while(y >= 0 && dt[y]+ds[i] > k-l) y--; ans += y+1;}
	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...