297732026-06-19 19:13:21miszorimarciMalmokból szállítás *cpp17Elfogadva 100/100404ms23436 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m, u;cin >> n >> m >> u;
    vector<vector<pair<int, int>>>adj(n + 1);
    vector<int>min_edge(n + 1, 1e9);
    vector<int>p(n + 1, 0);
    vector<bool>in_mst(n + 1, false);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>pq;
    for(int i = 0; i < m; ++i)
    {
        int x;cin >> x;
        min_edge[x] = 0;
        pq.push({0, x});
    }

    for(int i = 0; i < u; ++i)
    {
        int u, v, w;cin >> u >> v >> w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
    long long ans = 0;
    while (!pq.empty())
    {
        int cost = pq.top().first;
        int u = pq.top().second;
        pq.pop();
        if (in_mst[u]) continue;
        in_mst[u] = true;
        ans += cost;
        for(auto& edge : adj[u])
        {
            int v = edge.first;
            int w = edge.second;
            if(!in_mst[v] && w < min_edge[v])
            {
                min_edge[v] = w;
                p[v] = u;
                pq.push({w, v});
            }
        }
    }
    cout << ans << "\n";
    for (int i = 1; i <= n; ++i) cout << p[i] << (i == n ? "" : " ");
    cout << "\n";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base100/100
1Elfogadva5/51ms500 KiB
2Elfogadva5/51ms316 KiB
3Elfogadva5/51ms332 KiB
4Elfogadva5/51ms316 KiB
5Elfogadva6/61ms508 KiB
6Elfogadva6/61ms316 KiB
7Elfogadva6/61ms316 KiB
8Elfogadva6/683ms5680 KiB
9Elfogadva7/7202ms11904 KiB
10Elfogadva7/7381ms23436 KiB
11Elfogadva7/782ms5676 KiB
12Elfogadva7/7199ms11828 KiB
13Elfogadva7/7404ms23396 KiB
14Elfogadva7/7200ms12464 KiB
15Elfogadva7/7395ms23224 KiB
16Elfogadva7/790ms6444 KiB