256282026-02-23 18:36:58GeneratrollBarátnők (50 pont)cpp17Accepted 50/50108ms8420 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct E {
	int u;
	int v;
	int w;
};
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	int m;
	cin >> n >> m;
	vector<vector<pair<int, int>>> g(n + 1);
	vector<E> e(m);
	for (int i = 0; i < m; i++) {
		int u;
		int v;
		int w;
		cin >> u >> v >> w;
		g[u].push_back({v, w});
		g[v].push_back({u, w});
		e[i] = {u, v, w};
	}
	int a;
	int b;
	cin >> a >> b;
	ll r = 1000000007;
	ll f = 1000000000000000000LL;
	vector<ll> d1(n + 1, f);
	vector<ll> d2(n + 1, f);
	vector<ll> c1(n + 1, 0);
	vector<ll> c2(n + 1, 0);
	auto h = [&](int s2, vector<ll>& d, vector<ll>& c) {
		d[s2] = 0;
		c[s2] = 1;
		priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> q;
		q.push({0, s2});
		while (!q.empty()) {
			auto [x, u] = q.top();
			q.pop();
			if (x > d[u]) {
				continue;
			}
			for (auto& [v, w] : g[u]) {
				if (d[v] > d[u] + w) {
					d[v] = d[u] + w;
					c[v] = c[u];
					q.push({d[v], v});
				} else if (d[v] == d[u] + w) {
					c[v] = (c[v] + c[u]) % r;
				}
			}
		}
	};
	h(a, d1, c1);
	h(b, d2, c2);
	ll l = d1[b];
	ll z = (c1[b] * c1[b]) % r;
	for (int i = 1; i <= n; i++) {
		if (d1[i] + d2[i] == l && 2 * d1[i] == l) {
			ll s = (c1[i] * c2[i]) % r;
			z = (z - s * s % r + r) % r;
		}
	}
	for (auto& x : e) {
		if (d1[x.u] + x.w + d2[x.v] == l) {
			if (2 * d1[x.u] < l && 2 * (d1[x.u] + x.w) > l) {
				ll s = (c1[x.u] * c2[x.v]) % r;
				z = (z - s * s % r + r) % r;
			}
		} else if (d1[x.v] + x.w + d2[x.u] == l) {
			if (2 * d1[x.v] < l && 2 * (d1[x.v] + x.w) > l) {
				ll s = (c1[x.v] * c2[x.u]) % r;
				z = (z - s * s % r + r) % r;
			}
		}
	}
	cout << z << '\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms508 KiB
2Accepted0/0107ms7856 KiB
3Accepted2/22ms492 KiB
4Accepted2/22ms316 KiB
5Accepted2/21ms584 KiB
6Accepted2/22ms316 KiB
7Accepted2/22ms356 KiB
8Accepted1/150ms5536 KiB
9Accepted2/281ms8420 KiB
10Accepted2/286ms7288 KiB
11Accepted2/282ms7476 KiB
12Accepted2/287ms8016 KiB
13Accepted2/285ms7476 KiB
14Accepted2/281ms7476 KiB
15Accepted2/279ms7224 KiB
16Accepted1/1104ms7872 KiB
17Accepted1/1101ms8128 KiB
18Accepted1/146ms5428 KiB
19Accepted2/2108ms8280 KiB
20Accepted2/294ms7600 KiB
21Accepted2/298ms7828 KiB
22Accepted2/2100ms7724 KiB
23Accepted2/2104ms8328 KiB
24Accepted2/286ms7848 KiB
25Accepted2/275ms6280 KiB
26Accepted2/294ms7596 KiB
27Accepted2/2107ms7876 KiB
28Accepted2/298ms8312 KiB
29Accepted2/2100ms7564 KiB