Cod sursa(job #2729770)

Utilizator Tudor_PascaTudor Pasca Tudor_Pasca Data 25 martie 2021 12:22:17
Problema Arbore partial de cost minim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream in("apm.in");
ofstream out("apm.out");

const int INF = 0x3f3f3f3f3f3f3f3f;

int n, m, total;
int father[200100];
bool use[200100];
vector<vector<pair<int, int>>> adj;

void prim()
{
    vector<int> e(n, INF);
    e[1] = 0;

    for(int step = 1; step <= n; step++)
    {
        int mini = INF, v;

        for(int i = 1; i <= n; i++)
        {
            if(!use[i] && e[i] < mini)
            {
                mini = e[i];
                v = i;
            }
        }

        use[v] = 1;
        total += mini;

        for(auto it: adj[v])
        {
            if(!use[it.first] && it.second < e[it.first])
            {
                e[it.first] = it.second;
                father[it.first] = v;
            }
        }
    }

    out << total << '\n' << n - 1 << '\n';

    for(int i = 2; i <= n; i++)
        out << i << ' ' << father[i] << '\n';
}

int main()
{
    in >> n >> m;

    adj.resize(n + 5);

    for(int i = 1; i <= m; i++)
    {
        int x, y, cost;
        in >> x >> y >> cost;

        adj[x].emplace_back(y, cost);
        adj[y].emplace_back(x, cost);
    }

    prim();

    return 0;
}