Cod sursa(job #2676829)

Utilizator SahisttulArsene Marinel Sahisttul Data 25 noiembrie 2020 02:51:13
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("grafpond.in");

struct muchii
{
    int l, c, cost;
};

const int NMAX = 1000001;

int n, m;
vector<int> A[NMAX];
bool viz[NMAX];

muchii M[NMAX], sol[NMAX];

void citire()
{
    f >> n >> m;
    for(int i = 0; i < m; i++)
        f >> M[i].l >> M[i].c >> M[i].cost;
}

void sortare_muchii()
{
    for(int i = 0; i < m - 1; i++)
        for(int j = i + 1; j < m; j++)
            if(M[i].cost > M[j].cost)
            {
                int aux = M[i].cost;
                M[i].cost = M[j].cost;
                M[j].cost = aux;
                //
                aux = M[i].c;
                M[i].c = M[j].c;
                M[j].c = aux;
                //
                aux = M[i].l;
                M[i].l = M[j].l;
                M[j].l = aux;
            }
}

void DFS(int nod)
{
    viz[nod] = 1;
    for(int i = 0; i < A[nod].size(); i++)
        if(viz[A[nod][i]] == 0)
            DFS(A[nod][i]);
}

int main()
{
    citire();

    ///sortam muchiile grafului crescător după cost
    sortare_muchii();

    int S = 0, cnt = 0;
    for(int i = 0; i < m ; i++)
    {
        int nod_start = M[i].l;
        DFS(nod_start);

        if (viz[M[i].c] == 0)
        {
            S += M[i].cost;
            cnt++;
            cout << '(' << M[i].l << ", " << M[i].c << ", " << M[i].cost << ')' << '\n';

            A[M[i].l].push_back(M[i].c);
            A[M[i].c].push_back(M[i].l);
        }
    }
    cout << "Suma costurilor = " << S;
    return 0;
}