许诺 • 18天前
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
typedef pair<int, int> pii;
void dijkstra(int start, const vector<vector>& graph, vector& dist) {
priority_queue<pii, vector<pii>, greater<pii>> pq;
dist[start] = 0;
pq.push({0, start});
while (!pq.empty()) {
int current_dist = pq.top().first;
int u = pq.top().second;
pq.pop();
if (current_dist > dist[u]) continue;
for (auto &edge : graph[u]) {
int v = edge.first;
int weight = edge.second;
if (dist[v] > dist[u] + weight) {
dist[v] = dist[u] + weight;
pq.push({dist[v], v});
}
}
}
}
int main() {
int N, M, X;
cin >> N >> M >> X;
X--;
vector<vector<pii>> graph(N);
vector<vector<pii>> reverse_graph(N);
for (int i = 0; i < M; ++i) {
int a, b, t;
cin >> a >> b >> t;
a--; b--;
graph[a].push_back({b, t});
reverse_graph[b].push_back({a, t});
}
vector<int> dist_to_X(N, INT_MAX);
dijkstra(X, reverse_graph, dist_to_X);
vector<int> dist_from_X(N, INT_MAX);
dijkstra(X, graph, dist_from_X);
int max_time = 0;
for (int i = 0; i < N; ++i) {
if (dist_to_X[i] != INT_MAX && dist_from_X[i] != INT_MAX) {
max_time = max(max_time, dist_to_X[i] + dist_from_X[i]);
}
}
cout << max_time << endl;
return 0;
}
评论:
请先登录,才能进行评论