WA+TLE 悬棺求条qwq
查看原帖
WA+TLE 悬棺求条qwq
1331158
yuer111楼主2025/8/1 20:56
#include<bits/stdc++.h>
#define pll pair<ll,ll>
#define ll long long
using namespace std;
const int N = 2e5 + 5;
ll n, m, s, t, l, k;
ll cnt, h[N];
struct node {
	int nxt, to, dis;
} e[N * 2];
void add(int x, int y, int z) {
	e[++cnt].nxt = h[x];
	e[cnt].to = y;
	e[cnt].dis = z;
	h[x] = cnt;
}
void dijkstra(int start, vector<ll>& dis) {
	priority_queue<pll, vector<pll>, greater<pll>> q;
	dis.assign(n + 1, LLONG_MAX / 2);
	dis[start] = 0;
	q.push({0, start});
	while (!q.empty()) {
		int x = q.top().second;
		ll d = q.top().first;
		q.pop();
		if (d > dis[x]) continue;
		for (int i = h[x]; i; i = e[i].nxt) {
			int y = e[i].to;
			ll nd = e[i].dis;
			if (dis[y] > dis[x] + nd) {
				dis[y] = dis[x] + nd;
				q.push({dis[y], y});
			}
		}
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m >> s >> t >> l >> k;
	for (int i = 1; i <= m; i++) {
		ll x, y, z;
		cin >> x >> y >> z;
		add(x, y, z);
		add(y, x, z);
	}
	vector<ll> dis_s(n + 1), dis_t(n + 1);
	dijkstra(s, dis_s);
	dijkstra(t, dis_t);
	ll od = dis_s[t];
	if (od <= k) {
		cout << n * (n - 1) / 2 << "\n";
		return 0;
	}
	ll ans = 0;
	for (int u = 1; u <= n; u++) {
		for (int v = u + 1; v <= n; v++) {
			ll new_dist = min(od, min(dis_s[u] + l + dis_t[v], dis_s[v] + l + dis_t[u]));
			if (new_dist <= k) ans++;
		}
	}
	cout << ans << "\n";
	
	return 0;
}

记录

2025/8/1 20:56
加载中...