AC

许诺  •  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;

}


评论:

请先登录,才能进行评论