#include <bits/stdc++.h>
#define Longgggg ios_base::sync_with_stdio(0); cin.tie(0);
#define ll long long
using namespace std;
#define fi first
#define se second
const ll LINF = 1e18;
ll travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
vector<vector<pair<int,ll>>> adj(N);
for (int i = 0; i < M; ++i) {
adj[R[i][0]].push_back({R[i][1], L[i]});
adj[R[i][1]].push_back({R[i][0], L[i]});
}
vector<ll> T(N, LINF);
vector<bool> vis(N, false);
// Ban đầu: tất cả exit T=0
using pli = pair<ll,int>;
priority_queue<pli, vector<pli>, greater<pli>> pq;
for (int i = 0; i < K; ++i) {
T[P[i]] = 0;
pq.push({0, P[i]});
}
while (!pq.empty()) {
auto [curT, u] = pq.top(); pq.pop();
if (vis[u]) continue;
vis[u] = true;
// Xét tất cả hàng xóm của u (node chưa xử lý)
for (auto [v, w] : adj[u]) if (!vis[v]) {
// Chuẩn bị xét update T[v] nếu đủ điều kiện
// Tính giá trị tốt nhất và tốt nhì của T[x] + L(v,x) với x là hàng xóm v đã vào S
vector<ll> vals;
for (auto [x, wx] : adj[v]) if (vis[x]) {
vals.push_back(T[x] + wx);
}
if (vals.size() < 2) continue; // Chưa thể xác định T[v]
sort(vals.begin(), vals.end());
ll newT = vals[1]; // Tốt nhì!
if (newT < T[v]) {
T[v] = newT;
pq.push({T[v], v});
}
}
}
return T[0];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |