256282026-02-23 18:36:58GeneratrollBarátnők (50 pont)cpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/0107ms7856 KiB
3Elfogadva2/22ms492 KiB
4Elfogadva2/22ms316 KiB
5Elfogadva2/21ms584 KiB
6Elfogadva2/22ms316 KiB
7Elfogadva2/22ms356 KiB
8Elfogadva1/150ms5536 KiB
9Elfogadva2/281ms8420 KiB
10Elfogadva2/286ms7288 KiB
11Elfogadva2/282ms7476 KiB
12Elfogadva2/287ms8016 KiB
13Elfogadva2/285ms7476 KiB
14Elfogadva2/281ms7476 KiB
15Elfogadva2/279ms7224 KiB
16Elfogadva1/1104ms7872 KiB
17Elfogadva1/1101ms8128 KiB
18Elfogadva1/146ms5428 KiB
19Elfogadva2/2108ms8280 KiB
20Elfogadva2/294ms7600 KiB
21Elfogadva2/298ms7828 KiB
22Elfogadva2/2100ms7724 KiB
23Elfogadva2/2104ms8328 KiB
24Elfogadva2/286ms7848 KiB
25Elfogadva2/275ms6280 KiB
26Elfogadva2/294ms7596 KiB
27Elfogadva2/2107ms7876 KiB
28Elfogadva2/298ms8312 KiB
29Elfogadva2/2100ms7564 KiB