103332024-03-31 17:08:17szilVázsony vonatjegyet vásárolcpp17Hibás válasz 0/100600ms123496 KiB
#include <bits/stdc++.h>
#include <queue>

using namespace std;
using ll = long long;

const int MAXN = 100'001;

vector<pair<int, ll>> g[MAXN];
vector<int> g2[MAXN];
int dp[MAXN], n, m, a, b;
ll dist[MAXN];

void dijkstra(int source) {
	fill(dist, dist+MAXN, 1e18);
	priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
	dist[source] = 0;
	pq.push({0, source});
	while (!pq.empty()) {
		auto [d, u] = pq.top(); pq.pop();
		if (dist[u] != d) continue;
		for (auto [v, w] : g[u]) {
			if (dist[v] > dist[u] + w) {
				dist[v] = dist[u] + w;
				pq.push({dist[v], v});
			}
		}
	}
}

void build_graph() {
	for (int i = 1; i <= n; i++) {
		for (auto [u, w] : g[i]) {
			if (dist[i] >= dist[u]) {
				g2[i].emplace_back(u);
			}
		}
	}
}

int longest_route(int u) {
	if (dp[u] == -1) {
		dp[u] = INT_MIN;
		for (int v : g2[u]) {
			dp[u] = max(dp[u], 1 + longest_route(v));
		}
	}
	return dp[u];
}

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
	fill(dp, dp+MAXN, -1);
	cin >> n >> m >> a >> b;
	for (int i = 0; i < m; i++) {
		int u, v; ll w; cin >> u >> v >> w;
		g[u].emplace_back(v, w);
		g[v].emplace_back(u, w);
	}
	dp[b] = 0;
	dijkstra(b);
	build_graph();
	cout << longest_route(a) << "\n";
	int u = a;
	while (u != b) {
		pair<int, int> best = {-1, 0};
		dp[u] = INT_MIN;
		cout << u << " ";
		for (int v : g2[u]) {
			best = max(best, {dp[v], v});
		}
		u = best.second;
	}
	cout << b << "\n";
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva8ms13704 KiB
2Hibás válasz112ms34696 KiB
subtask20/20
3Hibás válasz54ms26696 KiB
4Hibás válasz330ms70140 KiB
5Hibás válasz246ms60020 KiB
6Hibás válasz216ms54664 KiB
7Hibás válasz250ms63264 KiB
8Hibás válasz204ms54188 KiB
9Hibás válasz465ms88656 KiB
subtask30/15
10Hibás válasz152ms63824 KiB
11Hibás válasz14ms28920 KiB
12Hibás válasz14ms29244 KiB
13Hibás válasz41ms36632 KiB
14Hibás válasz70ms50860 KiB
subtask40/20
15Hibás válasz59ms42060 KiB
16Hibás válasz187ms59208 KiB
17Hibás válasz37ms41888 KiB
18Hibás válasz67ms48648 KiB
19Hibás válasz39ms42320 KiB
20Hibás válasz70ms48396 KiB
subtask50/45
21Hibás válasz7ms36264 KiB
22Hibás válasz600ms123496 KiB
23Hibás válasz45ms44156 KiB
24Hibás válasz182ms65672 KiB
25Hibás válasz172ms61268 KiB
26Hibás válasz296ms74540 KiB
27Hibás válasz175ms64628 KiB
28Hibás válasz455ms109128 KiB
29Hibás válasz108ms57296 KiB
30Hibás válasz405ms97784 KiB
31Hibás válasz194ms66036 KiB
32Hibás válasz43ms49776 KiB
33Hibás válasz312ms75972 KiB
34Hibás válasz261ms75136 KiB
35Hibás válasz289ms74008 KiB
36Hibás válasz282ms72304 KiB
37Hibás válasz254ms70956 KiB