제출 #1271527

#제출 시각아이디문제언어결과실행 시간메모리
1271527rayan_bdCities (BOI16_cities)C++20
0 / 100
177 ms18876 KiB
#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5 + 100;
#define int long long
const int inf = 1e18;
vector<pair<int, int>> adj[mxN];
map<int, vector<int>> mp;
int mark[mxN];
void djikstra(int u, int n){
    vector<int> dist(n + 1, inf);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    dist[u] = 0;
    pq.push({0, u});
    while(pq.size()){
        auto tp = pq.top();
        pq.pop();
        if(dist[tp.second] < tp.first) continue;
        for(auto it : adj[tp.second]){
            if(dist[it.first] > tp.first + it.second){
                dist[it.first] = tp.first + it.second;
                pq.push({dist[it.first], it.first});
            }
        }
    }
    mp[u] = dist;
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);
    int n, k, m, u, v, w;
    cin >> n >> k >> m;
    for(int i = 1; i <= k; ++i){
        cin >> mark[i];
    }
    for(int i = 1; i <= m; ++i){
        cin >> u >> v >> w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
    for(int i = 1; i <= k; ++i){
        djikstra(mark[i], n);
    }
    assert(k <= 3);
    if(k == 2){
        cout << mp[mark[1]][mark[2]] << "\n";
    }else{
        int ans = inf;
        for(int i = 1; i <= k; ++i){
            int middle = mark[i];
            int a = 0, b = 0;
            if(i == 1) a = mark[2], b = mark[3];
            if(i == 2) a = mark[1], b = mark[3];
            if(i == 3) a = mark[1], b = mark[2];
            ans = min(ans, mp[middle][a] + mp[middle][b]);
        }
        cout << ans << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...